NodeJS MSSQL WHERE IN Prepared SQL 语句
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
时,该语句工作正常 WHERE X = @Y
我只是在努力解决我需要传递的数组skus
允许他们在准备好的语句中工作。
我正在使用 split
和 join
修改字符串以逗号分隔它们等等,但我无法使这些方法起作用。
我假设我需要参数字符串如下所示 'product1','product2','product3'
。
如果有人可以阐明如何调试已完成的准备好的语句,这样我就可以看到实际查询的内容 SQL(使用参数就位)
,这也会很有用
非常感谢!
看来 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) {
});
});
});
});
}
我正在使用 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
时,该语句工作正常 WHERE X = @Y
我只是在努力解决我需要传递的数组skus
允许他们在准备好的语句中工作。
我正在使用 split
和 join
修改字符串以逗号分隔它们等等,但我无法使这些方法起作用。
我假设我需要参数字符串如下所示 'product1','product2','product3'
。
如果有人可以阐明如何调试已完成的准备好的语句,这样我就可以看到实际查询的内容 SQL(使用参数就位)
,这也会很有用非常感谢!
看来 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) {
});
});
});
});
}