如何在 SQL Server 的存储过程和函数里进行错误处理
来源:互联网 发布:梦三国2脚本怎么编程 编辑:程序博客网 时间:2024/06/11 01:13
sql server 2005里引进了try...catch结构,下面具体讲述如何使用,并介绍处理错误是用到的各种函数和变量,包括:ERROR_NUMBER(),ERROR_SEVERITY(),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 的存储过程和函数里进行错误处理
- 如何在 SQL Server 的存储过程和函数里进行错误处理(try catch)
- sql server 存储过程里的like函数。
- 如何查找到SQL Server存储过程和函数里的关键词
- 查找到SQL Server存储过程和函数里的关键词
- SQL Server-- 存储过程中错误处理
- SQL Server-- 存储过程中错误处理
- SQL Server-- 存储过程中错误处理
- 几个在MS SQL Server处理IP的函数/存储过程
- SQL SERVER 中存储过程和函数的区别
- Sql Server函数和存储过程
- SQL SERVER 存储过程和自定义函数
- 在SQL Server存储过程里管理Transactions
- 在VFP里操作和管理SQL SERVER(介绍SQL-DMO)转帖 SQL SERVER2000数据库备份和恢复存储过程
- ASP.NET结合Sql Server数据库如何获得存储过程的返回值进行操作
- SQL Server里一些未公开的扩展存储过程
- SQL Server里一些未公开的扩展存储过程
- 如何在pl/sql里查看存储过程里面long text的值
- 在后台通过JAVASCRIPT代码调用按钮的事件
- PB针对SQL Server动态UPDATEBLOB SELECTBLOB实现办法
- ASP中调用存储过程
- QeePHP:后台登陆页面
- 软件开发项目计划书编写说明
- 如何在 SQL Server 的存储过程和函数里进行错误处理
- 手动打包
- 测试中,使用的linux指令
- 解决 IE7下图片上传预览
- 使用MERGE语句,这里简单总结一下 (一个语句解决update 和 insert 功能)
- 理解I/O Completion Port(完成端口)
- 又做了一点东西.
- 开发日志(2008)
- linux 脚本-学习记录