如何在 SQL Server 的存储过程和函数里进行错误处理(try catch)
来源:互联网 发布:p2p网络金融监管 编辑:程序博客网 时间:2024/05/22 07:03
SQL Server 2005里引进了try...catch结构,下面具体讲述如何使用,并介绍处理错误是用到的各种函数和变量,包括:ERROR_NUMBER(),ERROR_SAEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE(),@@ERROR和RAISERROR
try...catch例子如下:
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
SELECT @@ERROR AS ErrNum
RAISERROR (N'This is message %s %d.', -- Message text.
10, -- Severity,
1, -- State,
N'number', -- First argument.
5); -- Second argument.
END CATCH;
GO
其中catch模块里的各个错误处理方法功能如下:
ERROR_NUMBER():获取错误号。
ERROR_SEVERITY():返回错误等级(严重程度)。
ERROR_STATE():返回错误状态码。有时候在几种条件下都会发生同一种错误,比如1105号错误,每一种产生该错误的特定条件都对应一个状态码(state code),ERROR_STATE()返回的就是这个值。
ERROR_PROCEDURE():获取发生错误的sp名,如果不是sp或者trigger抛出的错误或者该方法是在catch模块外被调用,则返回null值。
ERROR_LINE():返回出错的行号。
ERROR_MESSAGE():返回错误的文本信息。
@@ERROR:错误号,和ERROR_NUMBER()不同的是,@@ERROR在每条语句执行完之后都会被重置,而ERROR_NUMBER()只在发生错误的时候才发生变化。
RAISERROR:抛出错误。具体语法如下:
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
参数含义如下:msg_id是消息ID,保存在sys.messages中。
msg_str 是消息文本,是临时指定的文本消息。
@local_variable 是文本变量,保存消息文本。
severity:错误等级。
state:错误状态码。
argument:如果msg_str里包含参数,则在这里指定。
WITH option:用户指定选项,一共有3个选项可以指定,分别是
LOG:写错误日志。错误日志里的错误不能超过440字节;只有sysadmin或者有Alter TRACE权限的用户能指定本选项。
NOWAIT:立即发送错误信息。
SETERROR:将msg_id的值赋给@@ERROR和ERROR_NUMBER,如果没有msg_id,就赋值5000.
eg.
RAISERROR (N'This is message %s %d.', -- Message text.
10, -- Severity,
1, -- State,
N'number', -- First argument.
5); -- Second argument.
-- The message text returned is: This is message number 5.
GO
RAISERROR (N'<<%*.*s>>', -- Message text.
10, -- Severity,
1, -- State,
7, -- First argument used for width.
3, -- Second argument used for precision.
N'abcde'); -- Third argument supplies the string.
-- The message text returned is: << abc>>.
GO
DECLARE @StringVariable NVARCHAR(50);
SET @StringVariable = N'<<%7.3s>>';
RAISERROR (@StringVariable, -- Message text.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO
- 如何在 SQL Server 的存储过程和函数里进行错误处理(try catch)
- 如何在 SQL Server 的存储过程和函数里进行错误处理
- SQL SERVER 里的错误处理(try catch)
- SQL SERVER 里的错误处理(try catch)
- 【SQL Server学习笔记】存储过程、sp_executesql存储过程、try catch错误处理
- T-SQL存储过程中try和catch以及错误处理的用法例子
- 在SQL Server 2005中使用Try…Catch块进行T-SQL错误处理
- SQL SERVER 里的 try catch
- 存储过程、sp_executesql存储过程、try catch错误处理
- sql server try...catch使用 异常处理 不错的SQL错误处理
- 使用TRY CATCH进行SQL Server异常处理<转载>
- 使用Try…Catch块进行T-SQL错误处理
- 在类里运用try catch出现的错误
- 在SQL Server的try...catch语句中获取错误消息的代码
- sql server 存储过程里的like函数。
- 如何查找到SQL Server存储过程和函数里的关键词
- 查找到SQL Server存储过程和函数里的关键词
- SQL Server-- 存储过程中错误处理
- android中修改framework层代码后怎样操作才能看到修改后的效果?
- neural network model
- 全面解析SurfaceView的原本定义
- 解决netbeans在linux字体显示的问题
- c语言中无符号数转换为带符号数
- 如何在 SQL Server 的存储过程和函数里进行错误处理(try catch)
- 求和1+2+3+...N
- VC打开一个目录选择对话框,并设置初始化目录
- C语言的谜题
- C runtime library
- 2012-04-10 16:32 android与WEB服务器交互时,如何保证在同一个会话Session中通信
- 【原创】Hook Shadow SSDT(提供可编译源代码的下载)
- eclipse 最常用命令
- 国外程序员推荐:每个程序员都应读的书