我正在使用 Node Express mssql 查询数据库以检索一些数据。我尝试发送的数据是逗号分隔的字符串。但数据库将它们识别为整数,因为它们是 id。问题是我的查询只识别第一个整数,而不识别后面的任何内容,例如,它只能识别 10 -> (10,11,12)。但我需要发送所有三个 ID。
路由.js
router.get('/', (req, res) => {
connectPool.then(pool => {
let projectId = req.query.id
let newAr = new Array();
let cpnew = 0
newAr = projectId.split(',')
for(a in newAr){
newAr[a] = parseInt(newAr[a])
}
console.log(newAr, 'logging new array')
for(let i=0; i<newAr.length;i++){
console.log(newAr, newAr[i], 'logging info')
if(newAr.length - 1 == i){
cpnew += newAr[i]
} else if(i == 0){
cpnew = newAr[i] + ','
}
else {
cpnew += newAr[i] + ','
}
}
let sqlString = `
SELECT p.Name
FROM Projects p with (nolock)
WHERE p.ProjectsID IN ((@projectId))
`
return pool.request().input('projectId', sql.Int, cpnew).query(sqlString)
}).then(result => {
let rows = result.recordset[0]
res.status(200).json(rows);
sql.close();
}).catch(err => {
res.status(500).send({ message: err})
sql.close();
});
})
所以基本上我做对了,因为我返回查询是将逗号分隔的字符串 -> 10,11,12 更改为带有整数的数组 -> [10,11,12],然后将其更改为整数10,11,12 之间有逗号。然后将其放入我的字符串变量中。我可能离这里很远,但此时我迷路了。谢谢!
最佳答案
DECLARE @ProjectID VARCHAR(100) = '1,3,2';
SELECT p.Name
FROM Projects p
WHERE p.ProjectsID IN ( SELECT value
FROM STRING_SPLIT(@ProjectID, ',') ); /*STRING_SPLIT Function
available from
MSSQL 2016 and above*/
关于javascript - SQL 一次搜索多个 id - Node/Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402886/