需要帮助在 SQL Server 中调试此存储过程



我一直在尝试创建如下存储过程,但不断收到这些错误:

Msg 137,级别 15,状态 1,过程 PKG_BNLX5_INSERT_DMBATCHERRLOG,第 164
行 必须声明标量变量"@V_ERR_REC"。

Msg 137,级别 15,状态 1,过程 PKG_BNLX5_INSERT_DMBATCHERRLOG,第 165
行 必须声明标量变量"@V_ERR_REC"。

Msg 137,级别 15,状态 1,过程 PKG_BNLX5_INSERT_DMBATCHERRLOG,第 166
行 必须声明标量变量"@V_ERR_REC"。

Msg 137,级别 15,状态 1,过程 PKG_BNLX5_INSERT_DMBATCHERRLOG,第 167
行 必须声明标量变量"@V_ERR_REC"。
.......
Msg 102,级别 15,状态 1,过程 PKG_BNLX5_INSERT_DMBATCHERRLOG,第 172
行 "@V_ERR_REC"附近的语法不正确。

法典:

CREATE PROCEDURE "PKG_BNLX5_INSERT_DMBATCHERRLOG"
    (@IN_PROCNAME VARCHAR(4000),
     @IN_TARNAME VARCHAR(4000),
     @IN_CURSOR VARCHAR(4000),
     @IN_UNIQUE_NUMBER FLOAT,
     @IN_SQLCODE VARCHAR(4000),
     @IN_SQLERRM VARCHAR(4000),
     @IN_REMARK VARCHAR(4000)) 
AS
BEGIN
    SET NOCOUNT ON;
    SET @V_ERR_REC.PROCNAME      = @IN_PROCNAME;
    SET @V_ERR_REC.TARNAME       = @IN_TARNAME;
    SET @V_ERR_REC.CURSOR        = @IN_CURSOR;
    SET @V_ERR_REC.UNIQUE_NUMBER = @IN_UNIQUE_NUMBER;
    SET @V_ERR_REC.DATIME        = GETDATE();
    SET @V_ERR_REC.ERRCODE       = @IN_SQLCODE;
    SET @V_ERR_REC.ERRDESC       = @IN_SQLERRM;
    SET @V_ERR_REC.REMARK        = @IN_REMARK;
    INSERT INTO VM1DTA.DMBATCHERRLOG VALUES @V_ERR_REC;
    COMMIT;
END;

您没有声明错误消息中引用的任何变量。 此外,看起来您正在尝试将所有参数设置为某种不存在的表?SQL Server变量并不是那样工作的。

通常,这种事情会像

DECLARE @V_ERR_REC.PROCNAME VARCHAR(4000) = @IN_PROCNAME

但根据您的其余查询,这似乎是不必要的。

最好只插入参数值。

INSERT INTO VM1DTA.DMBATCHERRLOG 
VALUES (@IN_PROCNAME, @IN_TARNAME, @IN_CURSOR, @IN_UNIQUE_NUMBER, GETDATE(), @IN_SQLCODE, @IN_SQLERRM, @IN_REMARK)

但是,您可能还应该显式设置将这些值插入到哪些字段中

INSERT INTO VM1DTA.DMBATCHERRLOG(Value1, Value2,..ValueN)

最新更新