设为首页 收藏本站
查看: 964|回复: 0

[经验分享] SQL Server -- SQLserver 存储过程执行错误记录到表

[复制链接]

尚未签到

发表于 2018-10-21 08:22:07 | 显示全部楼层 |阅读模式
  SQLserver 存储过程执行错误记录到表
  From: http://blog.csdn.net/leshami/article/details/51333650
  对于在执行存储过程中碰到的一些错误,如果未及时捕获或者说传递给前端应用程序来,在这样的情形下,故障的排查显得尤为困难。基于此,我们可以可以将这些错误信息记录到日志,同时也可以将其传递给前端应用程序。
  如本文的示例。
  一、将错误信息记录到表
  CREATE TABLE ErrorLog
  (

  >  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;
DSC0000.png

  二、传递错误信息
  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;
  --Result:
  245
  Error Number: 245 Error Serverity: 16 Error State: 1 Error Procedure: CatchErrorDemo2 Error Line: 10
  Error Message: 在将 varchar 值 'A' 转换成数据类型 int 时失败。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624286-1-1.html 上篇帖子: 如何通过JS调用某段SQL语句 下篇帖子: 关系型数据库和sql语句相关概念
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表