22,209
社区成员
发帖
与我相关
我的任务
分享
-- 1.适用于SQL2000.
set xact_abort on
begin tran
[事务代码]
commit tran
-- 2.适用于SQL2000.
begin tran
[事务语句1]
if @@error<>0
begin
rollback tran
goto ext
end
[事务语句2]
if @@error<>0
begin
rollback tran
goto ext
end
commit tran
ext:
select error_message()
-- 3.适用于SQL2005,2008.
begin try
begin tran
[事务代码]
commit tran
end try
begin catch
rollback tran
select error_number() as error_number ,
error_message() as error_message,
error_state() as error_state,
error_severity() as error_severity
end catch
create proc proc_t(@i int)
as
select 5 * 1.0 / @i
go
--1.不会报错
begin try
begin tran
exec proc_t 1
select '执行成功'
commit tran
end try
begin catch
select '执行失败'
if @@trancount >0
rollback
end catch
--2.这次会报错,因为分母为0
begin try
begin tran
exec proc_t 0
select '执行成功'
commit tran
end try
begin catch
select '执行失败'
if @@trancount >0
rollback
end catch
这样,就可以捕获存储过程抛出的异常