首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索sails中的多个结果集

检索sails中的多个结果集
EN

Stack Overflow用户
提问于 2017-10-02 07:46:05
回答 1查看 1.6K关注 0票数 9

我正在使用sails和它的sails-mssqlserver适配器。问题是,如果我的存储过程返回多个结果集,那么我只收到一个结果集,这是最新的结果集。同样的存储过程在Java中运行得很好,我可以迭代相关的结果集。

我需要知道是否有某种特定的方法来访问sails-mssqlserver中的所有结果集?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-03 16:20:41

sails-mssqlserver适配器是官方mssqlserver客户端的包装器,用于Node.js可用这里,但它的依赖性并不在最新版本上。

选项1:根据MsSQL包的正式文档,可以使用request.multiple = true命令在查询中启用多个记录集。

要在适配器中启用多个查询/记录集,一个常见的解决方法是打开/lib/Adapter.js并编辑原始查询函数。在var request = new mssql.Request(mssqlConnect)下面添加mssql.Request= true。如下面示例所示。

代码语言:javascript
复制
// Raw Query Interface
query: function (connection, collection, query, data, cb) {
  if (_.isFunction(data)) {
    if (debugging) {
      console.log('Data is function. A cb was passed back')
    }
    cb = data
    data = null
  }

  adapter.connectConnection(connection, function __FIND__ (err, uniqId) {
    if (err) {
      console.error('Error inside query __FIND__', err)
      return cb(err)
    }

    uniqId = uniqId || false
    var mssqlConnect
    if (!uniqId) {
      mssqlConnect = connections[connection].mssqlConnection
    } else {
      mssqlConnect = connections[connection].mssqlConnection[uniqId]
    }

    var request = new mssql.Request(mssqlConnect)

    // Add it here
    request.multiple = true

    request.query(query, function (err, recordset) {
      if (err) return cb(err)
      if (connections[connection] && !connections[connection].persistent) {
        mssqlConnect && mssqlConnect.close()
      }
      cb(null, recordset)
    })
  })
},

现在,返回的记录集应该包含多个结果。

选项2: --运行返回多个记录集的存储过程的用例的更可持续的选项,是使用官方Microsoft客户端的最新版本的Node.js。有关运行存储过程的信息可用这里

首先安装最新的软件包:

代码语言:javascript
复制
npm install mssql --save

在要运行存储过程的代码中,添加到mssql数据库的连接:

代码语言:javascript
复制
// require the mssql package
const sql = require('mssql')

// make a connection, you can use the values you have already stored in your adapter
const pool = new sql.ConnectionPool({
    user: sails.config.connections.<yourMsSQLConnection>.user,
    password: sails.config.connections.<yourMsSQLConnection>.password,
    server: sails.config.connections.<yourMsSQLConnection>.server,
    database: sails.config.connections.<yourMsSQLConnection>.database
})

// connect the pool and test for error 
pool.connect(err => {
    // ...
})

// run the stored procedure using request
const request = new sql.Request()
request.execute('procedure_name', (err, result) => {
    // ... error checks 
    console.log(result.recordsets.length) // count of recordsets returned by the procedure
    console.log(result.recordsets[0].length) // count of rows contained in first recordset
    console.log(result.recordset) // first recordset from result.recordsets
    console.log(result.returnValue) // procedure return value
    console.log(result.output) // key/value collection of output values
    console.log(result.rowsAffected) // array of numbers, each number represents the number of rows affected by executed statemens 
    // ...
})

// you can close the pool using
pool.close()

在这样的情况下,sails*数据库适配器不包含所需的所有功能。我发现最好是创建一个封装附加功能的Service。这是一个非常干净的解决方案。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46521392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档