关于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 ,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
5天前
|
SQL Oracle 安全
Oracle的PL/SQL异常处理方法:守护数据之旅的“魔法盾”
【4月更文挑战第19天】Oracle PL/SQL的异常处理机制是保障数据安全的关键。通过预定义异常(如`NO_DATA_FOUND`)和自定义异常,开发者能优雅地管理错误。异常在子程序中抛出后会向上传播,直到被捕获,提供了一种集中处理错误的方式。理解和善用异常处理,如同手持“魔法盾”,确保程序在面对如除数为零、违反约束等挑战时,能有效保护数据的完整性和程序的稳定性。
|
10月前
|
SQL Java 数据库连接
hyorm框架进阶用法
hyorm框架的原生使用方法,源于php laravel框架的orm层实现方案,基于单Query的设计方式,确保在java多线程中的线程安全性。
57 0
|
10月前
|
消息中间件 安全 数据库连接
.NET开发问题记录——TransactionScope出错:“与基础事务管理器的通信失败”的解决方法
.NET开发问题记录——TransactionScope出错:“与基础事务管理器的通信失败”的解决方法
202 0
|
12月前
|
SQL 数据可视化 关系型数据库
【JavaWeb篇】使用MyBatis简化JDBC开发|解决SQL语句警告的问题
【JavaWeb篇】使用MyBatis简化JDBC开发|解决SQL语句警告的问题
75 0
|
SQL 数据库 开发者
Yii 2.0 如何打印 SQL 语句调试呢?底层原理是什么?
Yii 2.0 如何打印 SQL 语句调试呢?底层原理是什么?
343 0
|
SQL 关系型数据库 MySQL
数据库编程 MySQL 常见异常和解决办法
mysqlslap 可以用于模拟服务器的负载,并输出计时信息。测试时,可以指定并发连接数,可以指定 SQL 语句。如果没有指定 SQL 语句,mysqlslap 会自动生成查询 schema 的 SELECT 语句。但是可能会报错
|
机器学习/深度学习 数据可视化 数据挖掘
视频理解的基本介绍与一些2D/3D的解决方法
视频理解的基本介绍与一些2D/3D的解决方法
386 0
视频理解的基本介绍与一些2D/3D的解决方法
|
Go 数据库
Go 数据库操作异常处理
Go 数据库操作异常处理
172 0
|
SQL 关系型数据库 MySQL
sql异常处理以及sql异常处理优先级
sql异常处理以及sql异常处理优先级
417 0