无法在查询中使用表值参数(TVP)(node.js& node-mssql)

时间:2016-10-14 07:43:36

标签: node.js table-valued-parameters node-mssql

美好的一天,

我正在尝试从SQL导出一些数据,存储它,然后将该数据与同一查询的结果进行比较。我能看到的最简单的方法是使用TVP,但它似乎不能在node-mssql上运行,并且它没有给我一个与TVP相关的错误。

我运行代码:

var _sql = require('mssql');
var _conn = new _sql.Connection(/*CONN STR*/,function(err) {
  if (err) {
    console.log('ERROR Unable to connect to DB:',err);
  } else {
    var oInitRequest = new _sql.Request(_conn);
    oInitRequest.query(/*DB QUERY*/)
      .then(function(oInitRS) {
        console.log('oInitData:',oInitRS);
        var oInitTable = oInitRS.toTable();
        console.log('oInitTable:',oInitTable);

        var oCheckRequest = new _sql.Request(_conn);
        oCheckRequest.input('oInitTable',_sql.TVP,oInitTable);
        oCheckRequest.query('SELECT * FROM @oInitTable')
          .then(function(oCheckRS) {
            console.log('oInitTable re-read:',oCheckRS);
          })
          .catch(function(err) {
            console.log('ERROR unable to pass oInitTable to new query',err);
          });
      })
      .catch(function(err) {
        console.log('ERROR Unable to retrieve oInitData',err);
      });
  }
});

我收到错误:

ERROR unable to pass oInitTable to new query
{
  [RequestError: Could not find stored procedure 'sp_executesql'.]
  name: 'RequestError',
  message: 'Could not find stored procedure \'sp_executesql\'.',
  code: 'EREQUEST',
  number: 2812,
  lineNumber: 1,
  state: 1,
  class: 16,
  serverName: /*REDACTED*/,
  procName: '',
  precedingErrors: []
}

为什么第一次查询成功使用sp_executesql运行查询但第二次查询不存在存储过程?

我尝试使用预备语句,但即使是没有参数的标准语句也无法说明错误:

{
  [RequestError: Could not find prepared statement with handle 0.]
  name: 'RequestError',
  message: 'Could not find prepared statement with handle 0.',
  code: 'EREQUEST',
  number: 8179,
  lineNumber: 1,
  state: 4,
  class: 16,
  serverName: /*REDACTED*/,
  procName: 'sp_execute',
  precedingErrors: []
}

有没有人知道如何在不创建专门针对1个查询的存储过程的情况下接受TVP的查询?

1 个答案:

答案 0 :(得分:0)

道歉。似乎这是node-mssql中的一个错误,而不是我可以帮助