我寫它運行在使用4點符號幾個不同的鏈接服務器SELECT
查詢的存儲過程。檢查鏈接的SQL服務器正在運行
的問題是,如果鏈接的服務器的一個沒有運行,查詢失敗,錯誤121 ('The semaphore timeout period has expired')
。其他SELECT
查詢然後不會運行,因爲此錯誤會停止執行其餘的查詢。
我想檢查@@ERROR
然後繼續運行的其他查詢。
我怎樣才能繼續運行查詢,如果該鏈接的服務器的一個連接失敗?
我使用SQL 2012
我寫它運行在使用4點符號幾個不同的鏈接服務器SELECT
查詢的存儲過程。檢查鏈接的SQL服務器正在運行
的問題是,如果鏈接的服務器的一個沒有運行,查詢失敗,錯誤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塊中的異常代碼的執行之前,但它不會停止存儲過程的執行。
很確定這仍然會超時,並不是所有鏈接的服務器錯誤都會被捕獲。見http://dba.stackexchange.com/questions/36178/linked-server-error-not-caught-by-try-catch – 2013-03-20 16:26:06
@AaronBertrand你絕對是對的,我要編輯我的代碼 – codingadventures 2013-03-20 16:35:35
歡迎鏈接的服務器,更好所知的高不可用的解決方案。嘗試設計無鏈接服務器的解決方案。 – 2013-03-20 16:13:44
@Tim你嘗試使用[TRY CATCH(http://msdn.microsoft.com/en-us/library/ms175976.aspx) – 2013-03-20 16:15:34
看一看:http://stackoverflow.com/questions/4442772/ sql-server-catch-exception-and-continue。那是你想要做的事情嗎? – RandomUs1r 2013-03-20 16:16:20