博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于SQLServer2005的学习笔记——异常捕获及处理
阅读量:7026 次
发布时间:2019-06-28

本文共 1961 字,大约阅读时间需要 6 分钟。

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
 
本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/310442
,如需转载请自行联系原作者
你可能感兴趣的文章
IEnumerable和IEnumerator 详解 (转)
查看>>
web service接口测试工具选型
查看>>
Stage3d 由浅到深理解AGAL的管线vertex shader和fragment shader || 简易教程 学习心得 AGAL 非常非常好的入门文章...
查看>>
vi编辑器的使用方式
查看>>
JOIN与EXISTS(子查询)的效率研究
查看>>
编码规范
查看>>
使用uliweb自动创建表单
查看>>
linux文本文件按列合并
查看>>
[javascript] ajaxfileupload.js 跨域上传文件
查看>>
android raw与assets区别
查看>>
[整] Android Fragment 生命周期图
查看>>
can not connect to MySQL server on "10.30.48.153"(13)
查看>>
Tutorial: Getting Started with SignalR (C#) -摘自网络
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
S3C2440触摸屏控制总结
查看>>
视频文件格式
查看>>
文件异步上传方式(一)
查看>>
funny alphabet
查看>>
STL队列 之FIFO队列(queue)、优先队列(priority_queue)、双端队列(deque)
查看>>
Android压力测试工具——Monkey
查看>>