关于SQLServer2005的学习笔记—异常捕获及处理
2014-08-17 12:31
716 查看
转自:/article/1684101.html
SQLServer2005 提供了类似于 C# 和 C++ 语言中的异常处理的错误处 理机制。
Transact-SQL 语句组可以包含在 TRY 块中。如果 TRY 块内部发生错误,则会将控 制传递给 CATCH 块中包含的另一个语句组。
相关错误消 息如下:
ERROR_NUMBER() 返回错误号。
ERROR_SEVERITY() 返回严重性。
ERROR_STATE() 返回错误状态号。
ERROR_PROCEDURE() 返回出现错误的存储过程或 触发器的名称。
ERROR_LINE() 返回导致错误的例程中的行 号。
ERROR_MESSAGE() 返回错误消息的完整文本。
-- 让我们看看 SQLServer2000 下的错误捕获,对于某些错 误实际上是无法捕获的
-- 创建一张通用日志表,以捕 获代码执行过程中的相关错误
-- 创建一个存储过程,以进行 错误捕获
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的学习笔记——异常捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- [转载]关于SQLServer2005的学习笔记——异常捕获及处理
- 关于SQLServer2005的学习笔记——XML的处理
- 关于SQLServer2005的学习笔记——XML的处理
- 关于SQLServer2005的学习笔记——XML的处理
- 精通SqlServer2005学习笔记----Sqlserver事物中的异常处理
- 学习笔记之面向对象编程9(异常的捕获和处理)
- 关于SQLserver2005事务和异常处理的联合处理以及在c#中的异常捕获
- 关于SQLServer2005的学习笔记 XML的处理
- 关于SQLServer2005的学习笔记——XML的处理
- JAVA学习笔记_关于异常机制处理问题
- 【学习笔记17】java面向对象-异常处理:捕获异常与抛出异常
- 关于SQLServer2005的学习笔记——XML的处理
- 关于SQLServer2005的学习笔记——XML的处理
- 关于SQLServer2005的学习笔记——约束、Check、触发器的执行顺序
- oralce学习笔记之异常处理篇
- 关于SQLServer2005的学习笔记——SQL查询解析步骤
- 关于SQLServer2005的学习笔记——子查询