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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
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 ,如需转载请自行联系原作者
相关文章
|
小程序 C#
C#WinForm实现Loading等待界面
上篇博客中解决了程序加载时屏幕闪烁的问题。 但是,加载的过程变得很缓慢。 这个给用户的体验也不是很好,我这里想加一个Loading的进度条。 项目启动的时候,加载进度条,界面UI加载完毕,进度条消失。
651 0
|
网络协议 前端开发 Java
SpringBoot 整合 WebSocket
WebSocket是基于TCP协议的一种网络协议,它实现了浏览器与服务器全双工通信,支持客户端和服务端之间相互发送信息。在有WebSocket之前,如果服务端数据发生了改变,客户端想知道的话,只能采用定时轮询的方式去服务端获取,这种方式很大程度上增大了服务器端的压力,有了WebSocket之后,如果服务端数据发生改变,可以立即通知客户端,客户端就不用轮询去换取,降低了服务器的压力。目前主流的浏览器都已经支持WebSocket协议了。
SpringBoot 整合 WebSocket
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
229 0
|
前端开发 Java 应用服务中间件
从零手写实现 tomcat-08-tomcat 如何与 springboot 集成?
本文探讨了Spring Boot如何实现像普通Java程序一样通过main方法启动,关键在于Spring Boot的自动配置、内嵌Servlet容器(如Tomcat)以及`SpringApplication`类。Spring与Tomcat集成有两种方式:独立模式和嵌入式模式,两者通过Servlet规范、Spring MVC协同工作。Spring和Tomcat的生命周期同步涉及启动、运行和关闭阶段,通过事件和监听器实现。文章鼓励读者从实现Tomcat中学习资源管理和生命周期管理。此外,推荐了Netty权威指南系列文章,并提到了一个名为mini-cat的简易Tomcat实现项目。
|
安全 Java 数据安全/隐私保护
java JDWP调试接口任意命令执行漏洞
java JDWP调试接口任意命令执行漏洞
738 1
|
SQL 监控 数据库
MSSQL性能调优实战指南:精准索引策略、SQL查询优化与高效并发控制
在Microsoft SQL Server(MSSQL)的性能调优过程中,精准索引策略、SQL查询优化以及高效并发控制是三大核心要素
|
前端开发 Java
【十四】springboot整合WebSocket
【十四】springboot整合WebSocket
323 0
|
移动开发 监控 网络协议
一文了解WebSocket及Springboot集成WebSocket
一文了解WebSocket及Springboot集成WebSocket
一文了解WebSocket及Springboot集成WebSocket
|
缓存 Java Apache
七大主流的HttpClient程序比较
七大主流的HttpClient程序比较
|
人工智能 C#
c#中在datagridview的表格动态增加一个按钮方法
c#中在datagridview的表格动态增加一个按钮方法,如果想要这一套教程的可以移步去这里 《期末作业C#实现学生宿舍管理系统》,对了最近我们有一个人工智能交流群,如果大家对代码有问题,想交流的可以进群,私聊我就可以了! 效果图片 : 在Load事件中写入代码 那ui有了功能怎么办呢?别急我们在 dataGridView1_CellContentClick事件中添加方法 这样的话 我们就可以点击对应行的修改来获取到id的值这里有一个bug就是第三行没数据需要隐藏,现在还没有解决,欢迎大家指出!.....
800 0
c#中在datagridview的表格动态增加一个按钮方法