4

我正在tedious.js使用参数运行此 SQL 查询:

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);

因为我正在寻找与where ... in ...子句提供的 ID 匹配的项目,所以我需要传入一个数组。但是,没有 TYPES.Array。我该怎么做?

4

3 回答 3

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);
        }
    });
于 2016-05-18T10:17:46.797 回答
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;
}
于 2018-03-24T14:44:00.050 回答
0

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

于 2015-08-19T21:22:23.760 回答