从Nodejs调用多参数化Azure SQL存储过程

时间:2017-10-04 07:39:49

标签: sql node.js stored-procedures azure-sql-database

我期待知道如何使用Nodejs中的多个输入参数运行Azure SQL存储过程。

例如,如果我有一个运行查询的存储过程FIND_USERS(activity_status, color, gender)

select * from users where isActive = activity_status and bay_color = color and userGender = gender; 

我应该可以使用输入参数从nodejs调用此存储过程。这里要理解的是,我想要一个SQL事务服务,它可以接受任何CALL PROCEDURE类型命令以及输入参数集,并使用这些输入参数调用过程,而不管输入参数的数量。

我所知道的是,对于MySQL,有一个mysql库,它允许我运行具有多个参数的过程。我已将其封装在MySQLConnector.js服务中

var mysql   = require('mysql');

exports.query = function(sql, values, next) {

    if (arguments.length === 2) {
        next = values;
        values = null;
    }
    var connection = mysql.createConnection({
        host:host,
        user:user,
        password:password,
        database:database
    });
    connection.connect(function(err) {
        if (err !== null) {
            console.log("[MYSQL] Error connecting to mysql:" + err+'\n');
            console.log(err == 'Error: ER_CON_COUNT_ERROR: Too many connections')
            if(err == 'Error: ER_CON_COUNT_ERROR: Too many connections'){
              connection.end();
            }
        }
    });
    connection.query(sql, values, function(err) {
        connection.end();
        if (err) {
            throw err;
        }
        next.apply(this, arguments);
    });
}

有了这个,我可以使用类似

的函数从nodejs调用存储过程
MySQLConnector.query('CALL FIND_USERS (?, ?, ?)', [1, 'blue', 'female'], function(err, userData) {
  //do something with userData
});

如何为Azure MS SQL执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用tedious驱动程序连接到SQL Server。它支持语句和SP的输入+输出参数,您可以在http://tediousjs.github.io/tedious/parameters.html

中找到示例

如果您需要更多帮助,请随意在GitHub中提出问题。

答案 1 :(得分:0)

使用Edje.js,您应该创建一个函数并在调用函数时发送参数。

getHorarioFarmacia({pSede:'Sucursal Parrita'}, function (error, result){....

}

有关详细信息,请阅读Luis Diego Pizarro here提出的意见。