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使用splitjoin到逗号分隔他们等等,但我不能让这些方法的工作。

我假设我需要参数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) { }); }); }); }); }