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

时间:2017-06-15 02:43:43

标签: 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: 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_parameter'附近的语法不正确
  代码:'EREQUEST'
  州:1
  课程:15

但是当我复制查询和数据以在SSMS中运行时,它很好

你能帮我找到错误的位置并修复它吗?

2 个答案:

答案 0 :(得分:0)

我认为它不会像这样工作,你必须使用sp_executesql。

创建如下的sql:

import grails.converters.*
import my.data.*

def accountJson = Account.get(1001) as JSON
println(accountJson.toString(true))
println(accountJson.toString(false))

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

并在查询中,将下面的查询(用您想要的列替换ID,标题)。

然后使用sp_executesql:

val preData = new java.util.ArrayList[String]
val currentData = new java.util.ArrayList[String]

def foreachRddFunc = (rdd:Rdd[String]) => {

rdd.collect().forecah(x => {
... ...
currentData.add(x)
... ...
})

//preData compare current data
... ... 

preData.addAll(currentData)

currentData.clear
}

答案 1 :(得分:0)

您需要删除'字符 例)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] + "")
 }
};

我希望它会对你有所帮助。