我正在编写一个存储过程,它SELECT
使用 4 点符号在几个不同的链接服务器上运行查询。
问题是,如果其中一个链接服务器未运行,则查询将失败并出现错误 121 ('The semaphore timeout period has expired')
。然后其他SELECT
查询不会运行,因为此错误会停止其余查询的执行。
我想检查@@ERROR
然后继续运行其他查询。
如果与其中一个链接服务器的连接失败,我如何继续运行查询?
我正在使用 SQL 2012。
我正在编写一个存储过程,它SELECT
使用 4 点符号在几个不同的链接服务器上运行查询。
问题是,如果其中一个链接服务器未运行,则查询将失败并出现错误 121 ('The semaphore timeout period has expired')
。然后其他SELECT
查询不会运行,因为此错误会停止其余查询的执行。
我想检查@@ERROR
然后继续运行其他查询。
如果与其中一个链接服务器的连接失败,我如何继续运行查询?
我正在使用 SQL 2012。
您是否尝试过使用 TRY-CATCH 异常块来包围您的单个调用?
BEGIN TRY
--First Server Connection (Server1) 192.168.1.x
--If the connection isn't available it will raise an exception
exec sp_testlinkedserver @servername = Server1
--SQL statement here
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH
BEGIN TRY
--Second Server Connection (Server2) 192.168.2.x
--If the connection isn't available it will raise an exception
exec sp_testlinkedserver @servername = Server2
--SQL statement here
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH
sp_testlinkedserver 将在执行代码之前在 try 块内引发异常,但不会停止存储过程的执行。