6

SELECT4 ドット表記を使用して、複数の異なるリンク サーバーでクエリを実行するストアド プロシージャを作成しています。

問題は、リンク サーバーの 1 つが実行されていない場合、クエリがエラー 121 で失敗すること('The semaphore timeout period has expired')です。このエラーによって残りのクエリの実行が停止されるため、他のSELECTクエリは実行されません。

@@ERROR確認してから、他のクエリの実行を続けたいと思いました。

リンク サーバーの 1 つへの接続が失敗した場合、クエリの実行を続行するにはどうすればよいですか?

SQL 2012 を使用しています。

4

1 に答える 1

7

単一の呼び出しを 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 ブロック内で例外を発生させますが、ストアド プロシージャの実行は停止しません。

于 2013-03-20T16:21:19.127 に答える