我遇到一个问题,我从链接服务器调用存储过程并且超时。但是我没有办法抓住这个。虽然它很少发生,但我想知道是否有任何方法可以捕捉到这个特殊的警告:
链接服务器“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则意味着调用失败,但它并没有告诉我具体原因是什么。反正基本上是否有警告?远程过程调用错误处理的最佳实践是什么?
答案 0 :(得分:0)
截至2019年,仍然没有办法正确捕获SQL Server远程超时错误。
它既适用于远程SP调用,也适用于execute ('select 1') at REMOTESQLSERVER
之类的构造。
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。