我正在使用node express mssql查询数据库以检索一些数据。我正在尝试发送的数据是逗号分隔的字符串。但是DB认为它们是int,因为它们是id。问题是我的查询只识别第一个整数,而不是之后的任何东西,所以,例如,它只识别10 - > (10,11,12)。但我需要发送所有三个ID。
route.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();
});
})
所以基本上我正在做的是因为我返回查询正在改变逗号分隔的字符串 - &gt; 10,11,12到一个带有整数的数组 - &gt; [10,11,12],然后用10,11,12之间的逗号将其改为整数。然后将变量放入我的字符串中。我可能会离开这里,但我现在迷路了。谢谢!
答案 0 :(得分:1)
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*/