在存储过程中,我们一般会用 raiserror来抛出存储过程中的异常,但如果你在这之后,又用了 return 参数的话,在外部就无法捕捉到此异常了。
比如
create proc #t1
as
select '1'
declare @errorid int
set @errorid = 1
raiserror(@errorid, 16, 1)
return @errorid
as
select '1'
declare @errorid int
set @errorid = 1
raiserror(@errorid, 16, 1)
return @errorid
我们用
exec('#t1')
print @@error
print @@error
显示的结果是 0
而
alter proc #t2
as
select '1'
declare @errorid int
set @errorid = 1
raiserror(@errorid, 16, 1)
return
as
select '1'
declare @errorid int
set @errorid = 1
raiserror(@errorid, 16, 1)
return
我们用
exec('#t1')
print @@error
得到的结果,是存储过程中正确抛出的值。