在 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 }
)
我搜索了文档并尝试了 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 }
)