-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 联机丛书。"。
SQL Server 网络接口:查找指定的服务器/实例时出错 [xFFFFFFFF]。

于 2012-07-02T21:35:41.720 回答