-1

更新が必要なサーバーをリンクしました。

BEGIN TRY

delete [SDNY-PAND\BarCode].Barcodes.dbo.barcodes
where Plant_Location <> 'Jefferson,  GA123'

-- bla bla bla


END TRY
BEGIN CATCH

--print ' in error now'


set @strBody = 'It appears that the server that holds the barcode data
        is currently unavailable.  Please validate that it is plugged in
        and turned on for IS' 
set @MailTo = 'ThatGroup@work'  
set @ESubject = 'Message from Barcode Server Update Process' 
EXEC msdb.dbo.sp_send_dbmail
        @recipients =@MailTo,
        @body = @strBody,
        @body_format ='TEXT',
        @subject = @ESubject,
        @profile_name ='ColossusMain'

END CATCH

このプロセスですか、それとももっと良い方法がありますか?

4

1 に答える 1

0

ちなみに、リンクされたサーバーのステータスを確認するには、これよりも優れた方法があります。sp_testlinkedserverという組み込みプロシージャがあります。これにより、リンクされたサーバーに到達できない場合にエラーが発生し、削除などを試みることができなくなり、代わりに CATCH に送信されます。削除によるさらにエラーがある場合、たとえば、CATCH も呼び出されますが、ERROR_MESSAGE() は異なります...

BEGIN TRY
  EXEC sp_testlinkedserver N'SDNY-PAND\BarCode';

  DELETE [SDNY-PAND\BarCode].Barcodes.dbo.barcodes
    WHERE Plant_Location <> 'Jefferson,  GA123';

  -- bla bla bla
END TRY
BEGIN CATCH
  SET @strBody = N'It appears...'
    + CHAR(13) + CHAR(10) + ERROR_MESSAGE();
  -- ...
  EXEC msdb.dbo.sp_send_dbmail ...;
END CATCH

サーバーに到達できない場合、エラー メッセージは次のようになります。

リンク サーバー "SDNY-PAND\BarCode" の OLE DB プロバイダー "SQLNCLI11" が、"ログイン タイムアウトの期限が切れました" というメッセージを返しました。
リンク サーバー "SDNY-PAND\BarCode" の OLE DB プロバイダー "SQLNCLI11" は、"SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできません。インスタンス名を確認してくださいが正しく、SQL Server がリモート接続を許可するように構成されているかどうか。詳細については、SQL Server Books Online を参照してください。
SQL Server ネットワーク インターフェイス: 指定されたサーバー/インスタンスの検索中にエラーが発生しました [xFFFFFFFF]。

于 2012-07-02T21:35:41.720 に答える