Javascript NodeJS MSSQL在准备好的SQL语句中的位置
我正在使用nodejsnpm包Javascript NodeJS MSSQL在准备好的SQL语句中的位置,javascript,sql,sql-server,node.js,prepared-statement,Javascript,Sql,Sql Server,Node.js,Prepared Statement,我正在使用nodejsnpm包sql 我目前有一系列产品SKU,如下所示 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
我目前有一系列产品SKU,如下所示
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) {
});
});
});
});
}
sku
正确地包含在params
对象中,因为当我将其用于简单的时,该语句运行良好,其中X=@Y
我正在努力解决如何传递sku
数组,以允许它们在准备好的语句中工作
我正在使用split
和join
修改字符串,以逗号分隔它们等等,但我无法让这些方法工作
我假设我需要param字符串看起来像下面的'product1','product2','product3'
如果有人能够解释如何调试已完成的预处理语句,这样我就可以看到实际查询到SQL的是什么(使用params)
非常感谢 看来
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) {
});
});
});
});
}
github上的一个类似问题:感谢您的澄清,我想我结束了生成逗号分隔字符串的过程。