捕捉动态执行存储过程的异常(MSSQL)

在存储过程中,我们一般会用 raiserror来抛出存储过程中的异常,但如果你在这之后,又用了 return 参数的话,在外部就无法捕捉到此异常了。

比如

create   proc  #t1
as
  
select   ' 1 '
  
declare   @errorid   int
  
set   @errorid   =   1
  
raiserror ( @errorid 16 1 )
  
return   @errorid

我们用
exec ( ' #t1 ' )

print   @@error

显示的结果是 0



alter   proc  #t2
as
  
select   ' 1 '
  
declare   @errorid   int
  
set   @errorid   =   1
  
raiserror ( @errorid 16 1 )
  
return  


我们用

exec ( ' #t1 ' )

print   @@error

得到的结果,是存储过程中正确抛出的值。

你可能感兴趣的:(MSSQL)