SQL Server TRY...CATCH 未捕获错误

Dez*_*yth 5 t-sql sql-server try-catch

BEGIN TRY
    EXEC N'EXEC sp_testlinkedserver N''[MyLinkedServer]'';';
END TRY
BEGIN CATCH
    SELECT 'LinkedServerDown' AS Result
    RETURN
END CATCH
SELECT TOP(1) FirstName FROM [MyLinkedServer].TestDatabase.dbo.Customer
Run Code Online (Sandbox Code Playgroud)

到目前为止,我第一次在 SQL Server 中使用 TRY...CATCH 的经验并没有给我留下深刻的印象。

我已经停止了链接服务器上的 SQL 服务,以尝试测试链接服务器关闭、无法访问等的情况。

此代码不会捕获任何错误,而是抛出“登录超时已过期”和“发生与网络相关或特定于实例的错误...”错误并停止执行其余代码。

我的 SQL TRY...CATCH 块设置不正确吗?

Kri*_*ana 4

根据 MSDN,sp_testlinkedserver 的作用是

测试与链接服务器的连接。如果测试不成功,则过程会引发异常并说明失败的原因。

因此,当您编译代码 (SP) 时,sp_testlinkedserver请检查连接。但您可以推迟此操作并使用动态 SQL 捕获它。

像这样 -

BEGIN TRY
    EXEC sp_executesql N'EXEC sp_testlinkedserver [192.168.51.81];';
END TRY
BEGIN CATCH
    SELECT 'LinkedServerDown' AS Result
END CATCH
Run Code Online (Sandbox Code Playgroud)

  • 我希望这能奏效!但相反,我得到了与以前相同的错误消息和结果。 (2认同)