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

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python与大数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值