博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLserver 存储过程执行错误记录到表
阅读量:6295 次
发布时间:2019-06-22

本文共 2532 字,大约阅读时间需要 8 分钟。

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

一、将错误信息记录到表

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 CatchErrorDemoAS --相关业务逻辑    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) OUTPUTAS    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;245Error Number: 245 Error Serverity: 16 Error State: 1 Error Procedure: CatchErrorDemo2 Error Line: 10 Error Message: 在将 varchar 值 'A' 转换成数据类型 int 时失败。
你可能感兴趣的文章
图书馆自动化系统 Evergreen 3.3 发布,迁移到 Angular
查看>>
kube-proxy源码解析
查看>>
SQL优化--inner、left join替换in、not in、except
查看>>
如何用纯 CSS 创作气泡填色的按钮特效
查看>>
IM热门功能讨论:为什么微信里没有消息“已读”功能? ...
查看>>
实现滑动菜单(富文本版本)
查看>>
Python入门
查看>>
8Manage:企业管理软件要通用型还是定制开发?
查看>>
吴恩达朋友圈宣布“喜讯”:AI专家王冬岩加入Landing AI ...
查看>>
乐行科技获1.08亿元A轮融资,并推出艾特好车
查看>>
云计算,能回答地球最终流浪到哪里吗?
查看>>
Oracle三级联动单表地址数据
查看>>
数据快传对于企业的重要性!
查看>>
《2018-2019全球IPv6支持度白皮书》发布,江北新区IPv6示范区建设正式启动
查看>>
策略模式原来这么简单!
查看>>
char,Character,int,字符及编码日记
查看>>
Data Structure_Sort Algorithm
查看>>
Linux下区分物理CPU、逻辑CPU和CPU核数
查看>>
EDAS ScheduleX 问题
查看>>
Android 表格HorizontalScrollView+ListView
查看>>