SQLServer2005 提供了类似于 C# 和 C++ 语言中的异常处理的错误处理机制。
Transact-SQL 语句组可以包含在 TRY 块中。如果 TRY 块内部发生错误,则会将控制传递给 CATCH 块中包含的另一个语句组。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_MESSAGE() 返回错误消息的完整文本。
-- 让我们看看 SQLServer2000 下的错误捕获,对于某些错误实际上是无法捕获的
DECLARE @ErrNum INT,@RowCount INT;
SET @RowCount=@@rowcount;
SET @RowCount=@@rowcount;
PRINT 'Encount Serious ERROR';
-- 创建一张通用日志表,以捕获代码执行过程中的相关错误
ID INT IDENTITY (1,1) NOT NULL,
ErrorMessage VARCHAR(1000),
ErrorProcedure VARCHAR(128)
CREATE PROCEDURE TestTryCatchProc
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())
-- 执行相关存储过程,并查询日志表,同时与系统消息表进行对比
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
本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/310442 ,如需转载请自行联系原作者