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

比如

捕捉动态执行存储过程的异常(MSSQL)create proc #t1
捕捉动态执行存储过程的异常(MSSQL)
as
捕捉动态执行存储过程的异常(MSSQL)  
select '1'
捕捉动态执行存储过程的异常(MSSQL)  
declare @errorid int
捕捉动态执行存储过程的异常(MSSQL)  
set @errorid = 1
捕捉动态执行存储过程的异常(MSSQL)  
raiserror(@errorid161)
捕捉动态执行存储过程的异常(MSSQL)  
return @errorid
捕捉动态执行存储过程的异常(MSSQL)

我们用
捕捉动态执行存储过程的异常(MSSQL)exec('#t1')
捕捉动态执行存储过程的异常(MSSQL)
捕捉动态执行存储过程的异常(MSSQL)
print @@error

显示的结果是 0



捕捉动态执行存储过程的异常(MSSQL)alter proc #t2
捕捉动态执行存储过程的异常(MSSQL)
as
捕捉动态执行存储过程的异常(MSSQL)  
select '1'
捕捉动态执行存储过程的异常(MSSQL)  
declare @errorid int
捕捉动态执行存储过程的异常(MSSQL)  
set @errorid = 1
捕捉动态执行存储过程的异常(MSSQL)  
raiserror(@errorid161)
捕捉动态执行存储过程的异常(MSSQL)  
return 


我们用
捕捉动态执行存储过程的异常(MSSQL)
捕捉动态执行存储过程的异常(MSSQL)
exec('#t1')
捕捉动态执行存储过程的异常(MSSQL)
捕捉动态执行存储过程的异常(MSSQL)
print @@error

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

相关文章:

  • 2022-02-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-14
  • 2022-12-23
  • 2022-01-19
  • 2021-05-18
  • 2021-06-29
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案