转自:http://blog.csdn.net/baoqiangwang/article/details/5395874

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

关于SQLServer2005的学习笔记—异常捕获及处理的更多相关文章

  1. python学习笔记——异常

    转自 http://www.cnblogs.com/rubylouvre/archive/2011/06/22/2086644.html Python内建异常体系结构 BaseException +- ...

  2. C++学习笔记--异常简介

    C++异常是对程序运行过程中发生的异常情况(如被0除)的一种响应.异常提供了将控制权从程序的一个部分传递到另一部分的途径. 1.对异常的处理有3个部分组成: (1)引发异常 (2)捕获有处理程序的异常 ...

  3. 0016 Java学习笔记-异常-如果try-catch-finally中都存在return语句会怎样?

    上午在搜索"System.runFinalization"的时候,搜到 http://www.cnblogs.com/Skyar/p/5962253.html ,其中有关于try- ...

  4. Java学习笔记--异常描述

    异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...

  5. 《Effective Java》学习笔记 ——异常

    充分发挥异常的优点,可以提高程序的可读性.可靠性和可维护性. 第57条 只针对异常的情况才使用异常 第58条 对可恢复的情况使用受检异常,对编程错误使用运行时异常 * 如果期望调用者能够适当的恢复,使 ...

  6. python基础学习1 -异常捕获

    #!/usr/bin/env python # -*- coding:utf-8 -*- #-------try-except try: file_name = input("请输入需要打开 ...

  7. Java学习笔记--异常机制

    简介 在实际的程序运行过程中,用户并不一定完全按照程序员的所写的逻辑去执行程序,例如写的某个模块,要求输入数字,而用户却在键盘上输入字符串:要求打开某个文件,但是文件不存在或者格式不对:或者程序运行时 ...

  8. CSAPP学习笔记(异常控制流1)

    1:诸如子进程结束之后父进程需要被告知,有时候应用程序需要系统调用,内核通过上下文切换将控制从一个进程切换到另一个进程,还有一个进程发送信号到另一个进程时接收者转而到它的信号处理函数去执行等等,我们的 ...

  9. Python学习笔记异常

    在程序代码中,可能会有各种错误的情况出现,且产生错误的结果是后面的代码都无法执行,即使是一点无关紧要的错误,如图: 在这样的情况下,我们需要异常处理,对程序代码中的错误抛出异常信息,且不影响后面的代码 ...

随机推荐

  1. IOS的MVC

    1 翻牌游戏 1.1 问题 根据苹果MVC设计模式的思想原则实现一个简单的翻牌游戏,功能如下: 1)界面上随机摆放12张背面朝上的纸牌,界面效果如图-1所示: 图- 1 2)点击纸牌可以使纸牌翻页,翻 ...

  2. 六、CCLayer

    一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象.CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入.其实, ...

  3. 传智springMVC笔记

    springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...

  4. VMware虚拟机固定IP后克隆出现无法访问网卡问题

    通常我们现在都喜欢使用虚拟机进行实验,进行集群搭建等,在这个过程中,会遇到克隆虚拟机问题,当没有修改任何IP的情况下,克隆后,在逐台修改IP地址是没有问题的,但是,如果我们先设置了固定IP地址后,克隆 ...

  5. JavaScript中指针和地址理解

    个人理解:指针只是指向内存的一个索引:而地址则是内存中确切的位置. 下面是函数中关于指针和地址一个小例子: function sum(num1,num2){ return num1+num2; } a ...

  6. Linux发展史

    简述 Linux是一套自由加开放源代码的类Unix操作系统,诞生于1991年10月5日(第一次正式向外公布),由芬兰学生Linus Torvalds和后来陆续加入的众多爱好者共同开发完成. Linux ...

  7. xmind第一天笔记

  8. ZOJ 1115 Digital Roots

    原题链接 题目大意:给一个数字,每一位相加求和,不断重复过程,直到剩一位数字. 解法:考虑到输入的数字可以很大,把输入按照字符串格式读入,再逐位处理. 参考代码: #include <iostr ...

  9. C#部分---"++"在前在后的区别。

    int a=5; int b=a++;//int b=a;a=a+1 int c=++a;//a=a+1;int c=a

  10. JavaWeb学习记录(二十一)——国际化处理

    ¨国际化又称为 i18n:internationalization ¨对于软件中的菜单栏.导航条.错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不 ...