NodeJS MSSQL在准备好的SQL语句中
我使用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
数组,以允许他们在准备好的语句中工作。
我是修改string使用split
和join
到逗号分隔他们等等,但我不能让这些方法的工作。
我假设我需要参数string看起来像下面的'product1','product2','product3'
。
如果有人能够阐明如何debugging已完成的准备语句,那么我也可以看到实际被查询到的是什么(使用params)
提前谢谢了!
看来, sql
对象(即mssql
模块)没有处理任何数组的属性。 而且,在对ps.input
的调用中指定标量types也是行不通的。
下一个最好的事情是为你的sql语句本身构build你的参数数组的键:
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) { }); }); }); }); }