您好,我有一个发送错误消息的扩展存储过程。
srv_sendmsg(pSrvProc, SRV_MSG_ERROR, errorNum, SRV_FATAL_SERVER, 1,
NULL, 0, (DBUSMALLINT) __LINE__,
buff,
SRV_NULLTERM);
我已将严重性设置为 SVR_FATAL_SERVER 只是为了测试是否可以导致消息在 sql 中引发异常。
在我的 SQL 中我正在做:
BEGIN TRY
EXEC dbo.xp_somethingCool
SET @Error = @@ERROR
END TRY
BEGIN CATCH
PRINT 'AN Error occoured!'
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH
我认为当我的xp发送错误消息时,tsql会捕获错误并选择error_number和error_message。相反,最终发生的情况是 xp 发送消息,而 T-SQL 继续前进,就像什么都没发生一样。 @@Error 变量也没有被设置。
所以我想知道是否有什么技巧可以让 SQL 捕获 XP 中的错误?
谢谢, 劳尔
最佳答案
您只能测试扩展存储过程的结果,并使用它来引发异常。
...
EXEC @rtn = dbo.xp_somethingCool
IF @rtn <> 0
RAISERROR ...
...
简单来说,扩展存储过程不是由数据库引擎运行的 SQL,因此您不能发出 RAISERROR。请参阅KB 190987了解更多信息
关于c++ - SQL Server 从扩展存储过程捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2017212/