在 Sequelize.js 中调用存储过程

Calling stored procedures in Sequelize.js

我搜索了文档并尝试了 google,但我没有找到问题的直接答案:

如何在 Sequelize 中调用存储过程?

我已经搜索了 Sequelize 的文档,但我什至没有在其中找到 "procedure" 这个词的踪迹。

我得到的最接近的是这个 bug-report-turned-feature-request: https://github.com/sequelize/sequelize/issues/959

引自link:

我想象的会很棒:

sequelize.query('CALL calculateFees();').success(
    function (settingName1, settingName2, settingName3, users) {
});

他们提到可以调用存储过程,但没有提供语法。

谁能给我一个语法正确的例子?

谢谢。

success 更改为 spread 就可以了。请注意,这仅适用于 sequlize 2.0

sequalise 查询 return promises 下面是我如何查询存储过程。

sequelize.query('CALL calculateFees();').then(function(response){
     res.json(response);
    }).error(function(err){
       res.json(err);
});

在Sequelize中使用参数调用SP

sequelize
  .query('CALL login (:email, :pwd, :device)', 
        {replacements: { email: "me@jsbot.io", pwd: 'pwd', device: 'android', }})
  .then(v=>console.log(v));

我用 EXEC 关键字执行了存储过程。

sequelize
.query('EXEC getData :@param1', { replacements: { @param1: 'Test'}, type:sequelize.QueryTypes.SELECT })
.then(data => /*Do something with the data*/)
.catch(error => /*Do something with the error*/)

我敢肯定,您可能还需要从存储过程中获取输出。这是一个代码,包括过程的输出值,使用 sequelize:

models.sequelize.query('DECLARE @outParam1 INT, @outParam2 INT EXEC procedureName @param1=:param, @outParam1 = @outParam1 output, @outParam2 = @outParam2 output SELECT @outParam1 AS "outParam1", @outParam2 AS "outParam2"',
    {
    replacements:
    {
        param: 123
        },
        type: models.sequelize.QueryTypes.EXEC
    }).spread(result => {
    if (result)
    {
        console.log("\nInside result : " + JSON.stringify(result));
        //return response here
    }

对于接受两个 DATETIME 参数的 MSSQL 存储过程,这对我有用:

db.query('EXEC STORED_PROCEDURE_NAME :startDate, :endDate',
        { replacements: { startDate: moment(payload.startDate).format('YYYY-MM-DD HH:mm:ss'), endDate: moment(payload.endDate).format('YYYY-MM-DD HH:mm:ss')},
          raw: true }
      )