Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166685
  • 博文数量: 103
  • 博客积分: 2251
  • 博客等级: 大尉
  • 技术积分: 1095
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-03 11:15
文章分类

全部博文(103)

文章存档

2011年(103)

分类: 数据库开发技术

2011-05-04 23:10:35

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

阅读(725) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~