SQL tedious add array as parameter

爷,独闯天下 提交于 2021-02-09 02:49:07

问题


I'm running this SQL query with tedious.js using parameters:

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

because I am looking for items that matches the ID provided with where ... in ... clause, I need to pass in an array. However, there is no TYPES.Array. How do I this properly?


回答1:


for this query, i think you'll just have to manually build the entire sql string. the TYPES enum values are for the datatypes in the database, not in your JavaScript code.




回答2:


//you can like this:

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



回答3:


Try creating the in clause parameters for query dynamically.

// 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;
}


来源:https://stackoverflow.com/questions/32102930/sql-tedious-add-array-as-parameter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!