gpt4 book ai didi

c++ - SQL Server 从扩展存储过程捕获错误

转载 作者:行者123 更新时间:2023-11-30 18:09:29 25 4
gpt4 key购买 nike

您好,我有一个发送错误消息的扩展存储过程。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com