1

我有一个问题,我从链接服务器调用存储过程并且它超时。但是我没有很好的方法来捕捉这个。虽然它很少发生,但我想知道是否有任何方法可以捕捉到这个特定的警告:

链接服务器“serverName”的 OLE DB 提供程序“SQLNCLI10”返回消息“查询超时已过期”。

不幸的是,try/catch 没有捕获警告,MS 确实有一个未解决的问题,这应该是一个错误:http ://connect.microsoft.com/SQLServer/feedback/details/337043/no-error-raised-when-远程程序超时

我不想增加 timeout 属性,我知道我可以这样做:

Declare @ret int
select @ret =  4417
Exec @ret=Server.DB.dbo.RemoteSP

如果之后@ret 为空,则意味着调用失败,但它并没有告诉我确切的原因是什么。无论如何,基本上可以捕捉到这个警告吗?远程过程调用错误处理的最佳实践是什么?

4

1 回答 1

0

截至 2019 年,仍然无法正确捕获 SQL Server 远程超时错误。

它既适用于远程 SP 调用,也适用于execute ('select 1') at REMOTESQLSERVER.

根据N.Nelu 的评论

Microsoft 文档在“不受 TRY...CATCH 构造影响的错误”下声明。

不受 TRY...CATCH 构造影响的错误

TRY...CATCH 构造不会捕获以下条件:

  • 严重性为 10 或更低的警告或信息性消息。

  • 严重性为 20 或更高的错误会停止会话的 SQL Server 数据库引擎任务处理。如果发生严重程度为 20 或更高的错误并且数据库连接未中断,则 TRY...CATCH 将处理该错误。

  • 注意,例如客户端中断请求或断开的客户端连接。

  • 当系统管理员使用 KILL 语句结束会话时。

您提供的连接链接已失效,但您仍然可以在此处投票修复此功能 。另请参阅4.3 链接服务器上的查询超时有关 SQL 错误处理的优秀文章

于 2019-02-05T09:46:15.490 回答