sql >> Base de Datos >  >> RDS >> Sqlserver

NodeJS MSSQL DONDE EN Declaración SQL preparada

Parece que sql objeto (es decir, el mssql module) no tiene ningún atributo para manejar matrices de nada. Además, especificando un tipo escalar en la llamada a ps.input tampoco funciona.

Lo siguiente mejor es crear claves para su matriz de parámetros en su propia declaración SQL:

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