[英]NodeJS MSSQL WHERE IN Prepared SQL Statement
我使用nodejs npm包sql
我目前有一个产品skus数组如此..
var skus = ['product1', 'product2', 'product3'];
我的sql存储在一个文件中如下...
SELECT *
FROM stock AS s
WHERE s.sku IN (@skus)
然后我也有我准备好的语句代码如下..
var connection = new sql.Connection(config, function(err) {
var ps = new sql.PreparedStatement(connection);
//Add params
if(params != undefined){
for(var key in params){
ps.input(key, sql.VarChar(200));
}
}
ps.prepare(sqlstatement, function(err) {
ps.execute(params, function(err, data) {
callback(null, data);
ps.unprepare(function(err) {
});
});
});
});
}
skus
在params
对象中正确包含,因为当我使用它时,语句工作正常WHERE X = @Y
我正在努力解决我需要如何传递skus
数组以允许它们在skus
准备语句中工作。
我修改字符串使用split
和join
到逗号分隔他们等等,但我不能让这些方法工作。
我假设我需要param字符串看起来像下面的'product1','product2','product3'
。
如果有人可以解释如何调试已完成的预准备语句,那么我也可以看到实际被查询到SQL的内容(使用params inplace)
提前谢谢了!
似乎sql
对象(即mssql
模块)没有属性来处理任何数组。 此外,在对ps.input
的调用中指定标量类型同样不起作用。
接下来最好的事情是将参数数组的键构建到sql语句本身:
var connection = new sql.Connection(config, function(err) {
var ps = new sql.PreparedStatement(connection);
// Construct an object of parameters, using arbitrary keys
var paramsObj = params.reduce((obj, val, idx) => {
obj[`id${idx}`] = val;
ps.input(`id${idx}`, sql.VarChar(200));
return obj;
}, {});
// Manually insert the params' arbitrary keys into the statement
var stmt = 'select * from table where id in (' + Object.keys(paramsObj).map((o) => {return '@'+o}).join(',') + ')';
ps.prepare(stmt, function(err) {
ps.execute(paramsObj, function(err, data) {
callback(null, data);
ps.unprepare(function(err) {
});
});
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.