首页 > 解决方案 > 如何使用 Sequelize 中的输出参数在 SQL Server 中执行存储过程?

问题描述

当我尝试使用以下输出参数执行存储过程时出现错误Sequelize

Executing (default): spsPerson @PersonID=0 OUTPUT, @Firstname=N'test', @Lastname=N'test'

UnhandledPromiseRejectionWarning: SequelizeDatabaseError: 将常量传递给存储过程时无法使用 OUTPUT 选项。

这是代码:

  seq.query(
    'spsPerson @PersonID=:PersonID OUTPUT, @Firstname=:firstname, @Lastname=:lastname,
    {
      type: seq.QueryTypes.SELECT,
      replacements: {
        PersonID: 0,
        Firstname: 'test',
        Lastname: 'test'
      },
    }
  );

这是我的存储过程:

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

CREATE PROCEDURE [dbo].[spsPerson]
    @PersonID INT OUTPUT,
    @Firstname VARCHAR(50),
    @Lastname VARCHAR(255)
AS
    INSERT INTO PersonTable (Firstname,  Lastname)
    VALUES (@Firstname,  @Lastname)

    SET  @PersonID  = SCOPE_IDENTITY()
GO

我不关心输出参数,只想执行这个存储过程而不改变它。

标签: node.jssql-serversequelize.js

解决方案


我暂时不测试它。你试一试并告诉我

定义存储功能:

SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER OFF
GO

CREATE PROCEDURE [dbo].[spsPerson]
    @Firstname VARCHAR(50),
    @Lastname VARCHAR(255)
AS
    INSERT INTO PersonTable (Firstname,  Lastname)
    VALUES (@Firstname,  @Lastname)

    return (SELECT IDENT_CURRENT('PersonTable'))
GO

在 sequelize 中查询:

sequelize
          .query('CALL spsPerson (:Firstname, :Lastname)', 
                {replacements: { Firstname: 'fistname', Lastname: 'lastname' }})
          .then(v=>console.log(v));

推荐阅读