javascript - 准备好的 SQL 语句中的 NodeJS MSSQL

标签 javascript sql sql-server node.js prepared-statement

我正在使用 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 = @YI 时,该语句工作正常我只是在为我需要如何传递 skus 数组以允许它们在准备好的语句中工作而苦苦挣扎。

我正在使用 splitjoin 修改字符串以逗号分隔它们等等,但我无法让这些方法起作用。

我假设我需要参数字符串看起来像下面的 'product1','product2','product3'

如果有人可以阐明如何调试已完成的准备好的语句,这样我就可以看到实际查询到 SQL 的内容(使用参数),这也会很有用

非常感谢!

最佳答案

似乎 sql 对象(即 mssql 模块)没有处理任何数组的属性。此外,在调用 ps.input 时指定标量类型同样不起作用。

下一个最好的事情是为你的参数数组构建键到你的 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) {
                });
            });
        });
    });
}

关于javascript - 准备好的 SQL 语句中的 NodeJS MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33390833/

相关文章:

javascript - 下面的js代码有什么区别?

javascript - 在加载自定义脚本之前加载 jQuery,而不使用模块或多个 <script> 标记

javascript - 从 Node 连接中抛出错误并在服务器错误处理程序中捕获它

SQL 根据当前日期减去两天选择记录

sql-server - 如何在T-SQL中设置多个变量的值?

javascript - 事件菜单突出显示 CSS

sql - Stata odbc 获取列注释作为标签

mysql - SQL Sum 查询行为异常?

sql - 使用 SQL::Abstract 时 where 子句中的列排序

c# - 无法打开登录请求的数据库 "dbname"。登录失败。用户 "machinname\username"登录失败