SQL繁琐的添加数组作为参数

时间:2015-08-19 18:25:07

标签: sql node.js tedious

我使用参数<{1}}运行此SQL查询:

tedious.js

因为我正在寻找与var query = "select * from table_name where id in (@ids)"; request = new sql.Request(query, function(err, rowCount) { if (err) { } }); request.on('row', function(columns) { }); var id = [1, 2, 3]; request.addParameters('ids', TYPES.Int, id); connection.execSql(request); 子句提供的ID匹配的项目,所以我需要传入一个数组。但是,没有TYPES.Array。我怎么做到这一点?

3 个答案:

答案 0 :(得分:0)

对于这个查询,我认为你只需要手动构建整个sql字符串。 TYPES枚举值适用于数据库中的数据类型,而不是JavaScript代码中的数据类型。

答案 1 :(得分:0)

//你可以这样:

var userIds = result.map(function (el) {
                return el.UserId;
            }).join(',');

var params = [{
name: 'userIds',
type: TYPES.VarChar,
value: userIds,
options: null}];

var querySql = ['SELECT  COUNT([MomentId]) FROM [T_Moment]',
        'WHERE [RecordStatus] = ', sysConst.recordStatus.activation, " AND CHARINDEX(','+RTRIM([UserId])+',' , ','+ @userIds +',')>0 "].join(' ');

    dbHelper.count(querySql, params, function (err, result) {
        if (err) {
            callback('error--');
        } else {
            callback(null, result);
        }
    });

答案 2 :(得分:0)

尝试动态创建用于查询的in子句参数。

// create connection 
let ids = [1, 2, 3];
let inClauseParamters = createInClauseParameters();
let query = `select * from table_name where id in (${inClauseParamters})`;
let request = new Request(query, (err, rowCount) => {
    if (err) { /* handle error */ }
});

request.on('row', (columns) => { /* get row */});
request = addRequestParameters(ids, request);
connection.execSql(request);


function createInClauseParameters(values) {
    return values.map((val, index) => `@Value${index}`).join(',');
}

function addRequestParameters(values, request) {
    values.forEach((val, index) => {
        request.addParameter(`Value${index}`, TYPES.VarChar, val);
    });
    return request;
}