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

时间:2019-02-08 15:13:34

标签: sql sql-server stored-procedures

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

  

消息137,第15级,状态1,过程PKG_BNLX5_INSERT_DMBATCHERRLOG,第164行
  必须声明标量变量“ @V_ERR_REC”。

     

消息137,第15级,状态1,过程PKG_BNLX5_INSERT_DMBATCHERRLOG,第165行
  必须声明标量变量“ @V_ERR_REC”。

     

消息137,第15级,状态1,过程PKG_BNLX5_INSERT_DMBATCHERRLOG,第166行
  必须声明标量变量“ @V_ERR_REC”。

     

消息137,级别15,状态1,过程PKG_BNLX5_INSERT_DMBATCHERRLOG,第167行
  必须声明标量变量“ @V_ERR_REC”。
  .......
  消息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;

1 个答案:

答案 0 :(得分:2)

您没有声明错误消息中引用的任何变量。另外,您似乎正在尝试将所有参数设置为某种不存在的表? 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)