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

转自: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 @[email protected]@error;

SET @[email protected]@rowcount;

PRINT ‘Encount ERROR‘;

PRINT @ErrNum

PRINT @RowCount

-- 不能被捕获的数据转换错误

SELECT ‘A‘+1

SET @[email protected]@error;

SET @[email protected]@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的学习笔记—异常捕获及处理

时间: 2024-10-07 02:09:22

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

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

C++异常是对程序运行过程中发生的异常情况(如被0除)的一种响应.异常提供了将控制权从程序的一个部分传递到另一部分的途径. 1.对异常的处理有3个部分组成: (1)引发异常 (2)捕获有处理程序的异常 (3)使用try块 C++异常的简单例子: double hmean(double a,double b) { if (a == -b) throw "bad hmean() arguments: a = -b not allowed";//引发异常 return 2.0 * a * b

JAVA学习笔记-异常机制

常见异常分类: ArithmeticException                               - 如试图除以0 NullPointerException                               - 当程序访问一个空对象的成员变量或方法. ClassCastException                                - 类型强制转换错误 ArrayIndexOutOfBoundsException           - 访问的元素下

Java学习笔记----异常

这是从别的网站盗来的图. 异常分为两种: Error:这是程序无法处理的错误 Exception:这是异常,又分为两种: 处理异常的方法: 抛出异常: throws 举个例子,汽车出现故障了,汽车自己没办法处理,就只能交给人去处理 throw出现在函数体里面,这个算是自定义了一个自己的异常类.可以输出自己所定义的异常. 注意:这个throw也是需要throws MyException的.一开始我以为不用.所以出错了 代码: package com.ehealth.exc; import java

Python学习笔记-异常

Python的运行时错误称为异常 1.语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译. 2.逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生存.计算或者输出结果需要的过程无法执行等. Python异常是一个对象,表示错误或意外情况 在python检测到一个错误时,将触发一个异常 1.python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号 2. 程序员也可以在代码中手动触发异常 python异常也可以理解为:程序出现了错误而在正常控制流以外采取

Java学习笔记——异常中的继承问题

<span style="font-size:18px;"> </span> /* 这个例子是关于异常在继承中的问题,当BException继承AException时,父类抛出AException,那么子类只能抛出AException或BException,而不能抛出其他异常,因为子类不能比父类还"有问题".下面是例子: */ <span style="font-size:18px;">class AExcep

Python学习记录-异常捕获

记录错误 如果不捕获错误,自然可以让Python解释器来打印出错误堆栈,但程序也被结束了.既然我们能捕获错误,就可以把错误堆栈打印出来,然后分析错误原因,同时,让程序继续执行下去. Python内置的logging模块可以非常容易地记录错误信息: # err_logging.py import logging def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): try: bar('0') except

javascript学习笔记(五):异常捕获和事件处理

异常捕获 Try{ 发生异常的代码块 }catch(err){ 异常信息处理 } 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta chaset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <form> 9 <input id="txt

异常的学习笔记+打包+doc的包编译

jvm默认的异常处理机制就是调用printStackTrace方法 对于多异常的处理.应该是定义更具体的异常来捕捉捕捉问题 捕获异常代码块出现继承关系 应该把被继承的异常放在子类异常块的后面 throw 和 throws的区别 throw是是用在函数上,而throws是使用在函数内 throw后面跟的是异常对象,而throws跟的是异常类可以 多个 对异常的分类: 1.编译时被检测到的异常. (值得去处理的异常,或者是希望得到调用者处理,并不影响运算意向) 2.编译时不被检测到的异常(运行时异常

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by