Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 节点MSSQL“@input_参数”附近的语法不正确_Sql Server_Node.js_Npm_Body Parser - Fatal编程技术网

Sql server 节点MSSQL“@input_参数”附近的语法不正确

Sql server 节点MSSQL“@input_参数”附近的语法不正确,sql-server,node.js,npm,body-parser,Sql Server,Node.js,Npm,Body Parser,我已经被这个错误困扰了大约一天了 我在html表单中使用node.js,其中输入类型=复选框,我希望mssql使用表单中发布的数据进行查询 让我们一起说吧 postData = [ '1','2','3','4','5' ] JS代码: var cfg = { user: 'user', password: '1234', server: 'COMPUTERNAME\\SQLEXPRESS', port: '1433', database: 'test', pool: { max: 2

我已经被这个错误困扰了大约一天了

我在html表单中使用node.js,其中输入类型=复选框,我希望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);
})

});
它给了我

“@input_参数”附近的语法不正确 代码:“EREQUEST” 国家:1 班级: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

您需要删除“”字符 Ex 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] + "")
 }
};
我希望它能帮助你