【问题标题】:Sequelize sytax for calling stored procedure with input parameters using MSSQL使用 MSSQL 使用输入参数调用存储过程的 Sequelize 语法
【发布时间】:2023-04-07 21:56:01
【问题描述】:

我收到以下代码错误,无法找到通过 sequelize 调用 MSSQL 存储过程的语法的准确信息。我还尝试了 stackoverflow 上其他帖子的语法,类似于 CALL spcName(param1, ...)

错误:

(node:14580) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): SequelizeDatabaseError: Incorrect syntax near '@param1'.

代码:

await sequelize.query('CALL spcName(@param1, @param2, @param3, @param4);', [value1, value2, value3, value4])

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    代码如下所示,适用于 MSSQL。由于格式原因,想要显示日期示例:

    return await sequelize.query('scpTest :inDate', {replacements: {inDate: moment().subtract('d', 4).toISOString(), type: sequelize.QueryTypes.SELECT}
    

    以下问题示例:

    await sequelize.query('spcName :param1, :param2, :param3, :param4)', {replacements: {param1: value, param2: value, param3: value, param4: value}, type: sequelize.QueryTypes.SELECT})
    

    【讨论】:

    • 仅供参考 - 我已经记录了一个关于 Sequelize 的问题,即查询返回重复结果集的存储过程。
    • 还记录了我的存储过程调用返回重复结果的问题。表示结果数组或 [[results], [results]] 的数组
    • 添加 QueryTypes.SELECT 修复了重复结果问题。
    【解决方案2】:

    你可以试试

    await sequelize.query('CALL spcName(:params )', { replacements: {params : ['value1, value2, value3, value4']} })
    

    【讨论】:

    • 嗯。这是一个与sequ​​elize无关的sql错误stackoverflow.com/a/19763826/4583460
    • 我没有复制和粘贴任何内容。值的 params 数组应该是字符串吗?
    • 嗯,我不认为 sequelize 可能插入了一些不当的东西,它是否记录了任何 sql
    【解决方案3】:

    使用: 表示参数,使用replacements 映射值。请参见下面的示例。

       async getPlayers(UserId: number, requestObject: any): Promise<any> {
            this.sequelize = Server.sequelize;
            try {
                let o_rowcnt = 0;
                let playersList = await this.sequelize.query('CALL sp_discovery (:p_user, :p_game, :p_platform, :p_headphone,:p_start,:p_end , :p_stanceId , @o_rowcnt )',
                    {
                        replacements: { 
                            p_user: UserId, 
                            p_game: requestObject.gameid,
                            p_platform: requestObject.platformid,
                            p_headphone:  requestObject.headphone,
                            p_start: requestObject.index,
                            p_end: requestObject.limit,
                            p_stanceId: requestObject.stanceid 
                        }
                    }
                );
                return playersList;
            } catch (e) {
                return e;
            }
        }
    

    【讨论】:

    • 您需要解释您的解决方案,而不是简单地发布代码。
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 2018-08-20
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多