摘要:
下文主要讲述sql server存储过程中处理错误的方法分享
一、存储过程中使用事务的自动回滚错误
在存储过程中,我们可以通过设置 Set XACT_ABORT ON 属性,并将所有的脚本代码放入一个事务中,
当存储过重产生错误时候,则自动回滚错误信息
Create Proc procTest @p1 varchar(10) as begin set NOCOUNT ON; set XACT_ABORT ON; begin tran [操作表代码] commit tran end
注意事项:
1.在存储过程中执行事务,当我们开启了XACT_ABORT属性,执行事务出错,则会自动回滚事务中所有代码,如果在事务中未开启此属性,那么事务中出错将继续执行,并不能达到事务保证操作的完整性。
2.set nocount no 不输出脚本操作影响了多少行
二、事务内进行判断
每执行一条sql脚本时,我们对脚本进行相关判断,是否存在错误信息,如果存在,则立即goto 回滚事务,如下所示:
create proc procTest @p1 varchar(10) as begin begin tran update table set filed ='' where keyId ='' if @@error <>0 goto err; insert into table (field)values('') if @@error <>0 goto err; commit tran return; err: rollback tran return; end
注意事项:
@@error 只能捕获前一条sql语句是否存在错误
三、存储过程中使用try、catch捕获错误
下文讲述在存储过程中使用 try catch 关键字捕捉错误信息
create proc procTest @p1 varchar(10) as begin Begin try update table set filed ='' where keyId ='' insert into table (field)values('') End try Begin Catch SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS ErrorMessage; End Catch end
注意事项:
ERROR_NUMBER() 返回错误号。
ERROR_SEVERITY() 返回严重性。
ERROR_STATE() 返回错误状态号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。