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