首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQLserver 存储过程执行错误记录到表

SQLserver 存储过程执行错误记录到表

作者头像
Leshami
发布2018-08-13 11:51:12
1.1K0
发布2018-08-13 11:51:12
举报
文章被收录于专栏:乐沙弥的世界乐沙弥的世界

对于在执行存储过程中碰到的一些错误,如果未及时捕获或者说传递给前端应用程序来,在这样的情形下,故障的排查显得尤为困难。基于此,我们可以可以将这些错误信息记录到日志,同时也可以将其传递给前端应用程序。如本文的示例。

一、将错误信息记录到表

CREATE TABLE ErrorLog
(
         ID             INT IDENTITY (1,1) NOT NULL,
         ErrorNumber    INT,
         ErrorMessage   VARCHAR(1000),
         ErrorSeverity  INT,
         ErrorState     INT,
         ErrorLine      INT,
         ErrorProcedure VARCHAR(128),
         ErrorDate      datetime
);

CREATE PROCEDURE CatchErrorDemo
AS --相关业务逻辑

    BEGIN TRY
        SELECT  1 / 0;
    END TRY
--相关错误捕获
    BEGIN CATCH
        PRINT 'Error Number:' + CAST(ERROR_NUMBER() AS VARCHAR(10));
        PRINT 'Error Serverity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10));
        PRINT 'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10));
        PRINT 'Error Procedure: ' + ERROR_PROCEDURE();
        PRINT 'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10));
        PRINT 'Error Message: ' + ERROR_MESSAGE();
        INSERT  INTO ErrorLog
                ( ErrorNumber ,
                  ErrorSeverity ,
                  ErrorState ,
                  ErrorProcedure ,
                  ErrorLine ,
                  ErrorMessage ,
                  ErrorDate
                )
        VALUES  ( ERROR_NUMBER() ,
                  ERROR_SEVERITY() ,
                  ERROR_STATE() ,
                  ERROR_PROCEDURE() ,
                  ERROR_LINE() ,
                  ERROR_MESSAGE() ,
                  GETDATE()
                )

    END CATCH;

--执行相关存储过程,并查询日志表,同时与系统消息表进行对比
EXEC CatchErrorDemo;
SELECT * FROM ErrorLog;

二、传递错误信息

CREATE PROC CatchErrorDemo2
    @a INT ,
    @rtn VARCHAR(20) OUTPUT ,
    @rtn_message VARCHAR(200) OUTPUT
AS
    BEGIN
        BEGIN TRY
            DECLARE @result INT; 

            SET @result = 'A' + @a;
        END TRY
        BEGIN CATCH
            SET @rtn = @@ERROR;

            SET @rtn_message = 'Error Number: '
                + CAST(ERROR_NUMBER() AS VARCHAR(10)) + ' Error Serverity: '
                + CAST(ERROR_SEVERITY() AS VARCHAR(10)) + ' Error State: '
                + CAST(ERROR_STATE() AS VARCHAR(10)) + ' Error Procedure: '
                + ERROR_PROCEDURE() + ' Error Line: '
                + CAST(ERROR_LINE() AS VARCHAR(10)) + ' Error Message: '
                + ERROR_MESSAGE();
        END CATCH;
    END;
GO

--调用存储过程
DECLARE @rtn INT ,
    @rtn_message VARCHAR(200);
EXEC CatchErrorDemo2 0, @rtn OUTPUT, @rtn_message OUTPUT;
PRINT @rtn;
PRINT @rtn_message;

245
Error Number: 245 Error Serverity: 16 Error State: 1 Error Procedure: CatchErrorDemo2 Error Line: 10 
Error Message: 在将 varchar 值 'A' 转换成数据类型 int 时失败。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、将错误信息记录到表
  • 二、传递错误信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档