'@input_parameter' 附近的节点 MSSQL 语法不正确

Node MSSQL incorrect syntax near '@input_parameter'

我已经被这个错误卡住了大约一天了

我正在使用 node.js 和 html 表单,其中输入类型=复选框,我希望 mssql 使用表单发布的数据来查询

比方说

postData = [ '1','2','3','4','5' ]

JS代码:

var cfg = {
user: 'user',
password: '1234',
server: 'COMPUTERNAME\SQLEXPRESS',
port: '1433',
database: 'test',
pool: {
    max: 20,
    min: 0,
    idleTimeoutMillis: 30000
 }
};

app.post('/select', urlencodedParser, function (req, res){

var in_dt = String();

for (var i = 0; i < req.body.postData.length; i++) {
 if (i==0) {
  in_dt += ("('" + req.body.postData[i] + "'")
 }else if (i==((req.body.postData.length)-1)) {
  in_dt += (", '" + req.body.postData[i] + "')")
 }else {
  in_dt += (", '" + req.body.postData[i] + "'")
 }
};


sql.connect(cfg).then(pool => {
  return pool.request()
  .input('input_parameter', sql.NVarChar, in_dt)
  .query('SELECT * FROM [test].[dbo].[Table1] where ID IN @input_parameter')
}).then(result => {

  res.render('select', { qDt: result.recordset });

  sql.close()
}).catch(err => {
  console.log(err);
})

sql.on('error', err => {
  console.log(err);
})

});

它给了我

Incorrect syntax near '@input_parameter'
code: 'EREQUEST'
state: 1
class: 15

但是当我在 SSMS 中将查询和数据复制到 运行 时没问题

你能帮我找到错误所在并修复它吗?

我认为它不会像这样工作,您将不得不使用 sp_executesql。

创建 sql 如下:

let sql = 'SELECT * FROM [test].[dbo].[Table1] where ID IN (@input_parameter)';

将此 sql 作为输入参数传递。

在查询中,将查询放在下方(将 ID、标题替换为您想要的列)。

然后使用 sp_executesql 作为 :

create table #tempLookup(ID int , Title nvarchar(MAX));
insert into #tempLookup
exec sp_executesql @sql, N'@input_parameter VARCHAR(MAX)', @input_parameter;
select ID,Title from #tempLookup; 
IF OBJECT_ID('tempdb..#tempLookup') IS NOT NULL
    DROP TABLE #tempLookup

您需要删除 ' 字符 例如)in_dt = (1,5,6,4,1) 可以 in_dt = ('1','5','6','4','1') 不行

var in_dt = String();
for (var i = 0; i < req.body.postData.length; i++) {
 if (i==0) {
  in_dt += ("(" + req.body.postData[i] + "")
 }else if (i==((req.body.postData.length)-1)) {
  in_dt += (", " + req.body.postData[i] + ")")
 }else {
  in_dt += (", " + req.body.postData[i] + "")
 }
};

希望对你有所帮助