SQL捕获远程过程引发的警告

时间:2012-05-08 13:09:48

标签: sql sql-server warnings

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

  

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

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

我不想增加超时属性,我知道我可以做类似的事情:

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

如果之后@ret为null则意味着调用失败,但它并没有告诉我具体原因是什么。反正基本上是否有警告?远程过程调用错误处理的最佳实践是什么?

1 个答案:

答案 0 :(得分:0)

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

它既适用于远程SP调用,也适用于execute ('select 1') at REMOTESQLSERVER之类的构造。

根据comment from N.Nelu

Microsoft docs状态下的“不受TRY ... CATCH构造影响的错误”。

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

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

  • 严重性为10或以下的警告或参考消息 更低。

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

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

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

您提供的

连接链接已失效,但您仍然可以投票解决此功能 here。另请参见 4.3链接服务器上的查询超时下的此excellent article on SQL Error handling