SQLServer2005 提供了类似于 C# 和 C++ 语言中的异常处理的错误处理机制。
Transact-SQL 语句组可以包含在 TRY 块中。如果 TRY 块内部发生错误,则会将控制传递给 CATCH 块中包含的另一个语句组。
相关错误消息如下:
ERROR_NUMBER() 返回错误号。
ERROR_SEVERITY() 返回严重性。
ERROR_STATE() 返回错误状态号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_MESSAGE() 返回错误消息的完整文本。
-- 让我们看看 SQLServer2000 下的错误捕获,对于某些错误实际上是无法捕获的
DECLARE @ErrNum INT,@RowCount INT;
-- 能够捕获的 0 做除数错误
SELECT 1/0;
SET @ErrNum=@@error;
SET @RowCount=@@rowcount;
PRINT 'Encount ERROR';
PRINT @ErrNum
PRINT @RowCount
-- 不能被捕获的数据转换错误
SELECT 'A'+1
SET @ErrNum=@@error;
SET @RowCount=@@rowcount;
PRINT 'Encount Serious ERROR';
PRINT @ErrNum
PRINT @RowCount
 
-- 创建一张通用日志表,以捕获代码执行过程中的相关错误
CREATE TABLE LogTable
(
ID             INT IDENTITY (1,1) NOT NULL,
ErrorNumber    INT,
ErrorMessage   VARCHAR(1000),
ErrorSeverity  INT,
ErrorState     INT,
ErrorLine      INT,
ErrorProcedure VARCHAR(128)
);
 
-- 创建一个存储过程,以进行错误捕获
CREATE PROCEDURE TestTryCatchProc
AS
-- 相关业务逻辑
BEGIN TRY
SELECT 1/0;
END TRY
-- 相关错误捕获
BEGIN CATCH
PRINT 'Error Numberv' + 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 LogTable(ErrorNumber,ErrorSeverity,ErrorState,ErrorProcedure,ErrorLine,ErrorMessage)
VALUES(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE())
-- 此处可以先对相关错误进行修正
END CATCH;
-- 执行相关存储过程,并查询日志表,同时与系统消息表进行对比
EXEC TestTryCatchProc
SELECT * FROM LogTable
SELECT * FROM sys.messages WHERE message_id=8134 AND language_id=2052
 
参考
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/8c16ecdf-68f4-4a2a-b594-086e3344e58a.htm
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/248df62a-7334-4bca-8262-235a28f4b07f.htm
 

关于SQLServer2005的学习笔记——异常捕获及处理相关推荐

  1. HALCON 21.11:深度学习笔记---异常检测(9)

    HALCON 21.11:深度学习笔记---异常检测(9) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的异常检测. 通过异常检测,我们想要检测图像是否包含 ...

  2. 《Python基础教程》学习笔记——异常

    Python基础教程--异常 异常 异常是什么 让事情沿你指定的轨道出错 raise 语句 自定义的异常类 捕获异常 不用提供参数 多个 except 子句 一箭双雕 捕获对象 一网打尽 万事大吉时 ...

  3. 《Java 核心技术卷1 第10版》学习笔记------异常

    异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器 . 7.1.1 异常分类 在 Java 程序设计语言中, 异常对象都是派生于 Throwable 类的一个实例 . 稍后还 ...

  4. 关于SQLServer2005的学习笔记——XML的处理

    在 SQLServer2005 中对 XML 的处理功能显然增强了很多,提供了 query(),value(),exist(),modify(),nodes() 等函数.关于 xml ,难以理解的不是 ...

  5. 关于SQLServer2005的学习笔记——SQL查询解析步骤

    最近一来因工作上的事情比较闹心,没心事再研究 SQLServer2005 的体系结构:一来关于体系结构确实过于复杂,远远不如应用来的直接明了,所以暂时搁笔. 出于工作上的需要,对应用开发需要更多的了解 ...

  6. 关于SQLServer2005的学习笔记——生日问题

    生日问题是个看似简单逻辑上却又比较复杂的小问题 主要的逻辑难点第一个是关于闰月尾天的计算,第二个是判断本年度生日是否已过 本文给出了三种解决办法, 第一种是最常用的解决办法,即常用的 SQL 语法,不 ...

  7. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){var StringVal = "12_12_13_15_a_b_c_d_yu_e ...

  8. kotlin学习笔记-异常好玩的list集合总结 1

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){var StringVal = "12_12_13_15_a_b_c_d_yu_e ...

  9. 关于SQLServer2005的学习笔记——约束、Check、触发器的执行顺序

    通常我们认为一条 Insert 就是一个事务,但这个事务是如何执行的呢?如果保障事务执行时该事务的完整性和一致性呢?抛开存储机制.索引.锁等环节,让我们看看约束. Check 和触发器在这个过程中的先 ...

  10. 关于SQLServer2005的学习笔记——CTE递归和模拟测试数据

    在 Oracle 中模拟测试 数据是非常简单的一件事情. Oracle 首先提供了一个 dual 的虚表 其次提供了一个 Connect by 语句,实现了虚表数据列的模拟 最后 Oracle 提供了 ...

最新文章

  1. ogre3d环境配置与简单程序示例
  2. Interviews(内连接,左外连接,分组、聚合)
  3. 分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?
  4. Timer定时器Demo
  5. iOS 常用公共方法
  6. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统
  7. RT-Thread I/O设备模型
  8. matplotlib动画入门(1):基本概念
  9. Java递归一个四十万的树结构_java递归展示树形图代码实现以及遇到的问题
  10. python基础--语句
  11. 产品开发之小步快跑,快速迭代
  12. Matlab计算矩阵的行列式
  13. [JSP]错误信息、错误处理
  14. Java笔记 - 网络编程
  15. 煲汤C语言,煲汤秘诀,附9款排骨汤做法,总有一款适合你!
  16. 微前端 - qiankun
  17. 志强CPU E5 E7参数,CPU内核参数对比图
  18. pikachu靶场-5 远程命令,代码执行漏洞(RCE)
  19. 【自学笔记】尚硅谷数据结构与算法Chapter 5 递归
  20. 【专题】莫比乌斯反演

热门文章

  1. 20165223《网络对抗技术》Exp 8 Web基础
  2. [Luogu 1197] JSOI2008 星球大战
  3. 场景分析:用户登录界面场景分析
  4. 架构之美阅读笔记06
  5. JavaScript要点 (一) 变量-作用域
  6. 为label或者textView添加placeHolder
  7. 美国在线教育的启示:教育领域正在革命
  8. springboot幂等性_springboot + redis + 注解 + 拦截器 实现接口幂等性校验
  9. 使用git+Jenkins部署代码
  10. 20171001~08总结