2013-03-20 32 views
6

私は、4ドット表記を使用して複数の異なるリンクサーバーでSELECTクエリを実行するストアドプロシージャを作成しています。リンクされたSQLサーバーが実行されているかどうかをチェック

リンクサーバーの1つが実行されていないと、クエリはエラーで失敗します。他のSELECTクエリは実行されません。このエラーは実行中のクエリの残りを停止するためです。

@@ERRORを確認してから、他のクエリを実行してみました。

リンクサーバーのいずれかへの接続に失敗した場合、どのようにクエリを実行し続けることができますか?私はSQL 2012年

+0

リンクサーバーへようこそ、高可用性ソリューションとしてよく知られています。リンクサーバーなしのソリューションを設計してみてください。 –

+0

@Tim [TRY CATCH](http://msdn.microsoft.com/en-us/library/ms175976.aspx)を使用してみましたか? –

+0

を見てください:http://stackoverflow.com/questions/4442772/ sql-server-catch-exception-and-continueを実行します。それはあなたがしようとしているもののジストですか? – RandomUs1r

答えて

6

を使用しています

あなたは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ブロック内で例外が発生しますが、それは、ストアドプロシージャの実行を停止しません。

+0

これはまだタイムアウトしており、リンクされたすべてのサーバーエラーが捕捉されるとは限りません。 http://dba.stackexchange.com/questions/36178/linked-server-error-not-caught-by-try-catch –

+0

@AaronBertrandあなたが間違いなく正しいと思います。コードを編集します – codingadventures

関連する問題