Database
 sql >> Base de Dados >  >> RDS >> Database

Capturando Erros do Servidor Vinculado


O SQL Server fornece um TRY CATCH mecanismo para permitir que um aplicativo perceba que algo deu errado e execute o código apropriado para lidar com o problema. Por exemplo:
BEGIN TRY
   <some code>
END TRY
BEGIN CATCH 
   PRINT 'This is the error: ' + error_message()
END CATCH

O código no TRY bloco é executado primeiro. Se ocorrer um erro, a execução é passada para o CATCH quadra.

Quais são as implicações para o tratamento de erros se você quiser usar TRY CATCH com um servidor vinculado? Nesta situação, pode ocorrer um erro em:
  1. A instância local do SQL Server.
  2. A interface do SQL Server usada para facilitar a conexão com o servidor remoto.
  3. A interface usada para tornar o servidor remoto acessível ao SQL Server.

Nossa configuração de exemplo usará um servidor Salesforce.com como servidor remoto. Para este tipo de servidor remoto, interface 2. é o Microsoft OLE DB Provider para Drivers ODBC e interface 3. é o driver ODBC Salesforce.com da Easysoft.

O seguinte erro ocorre localmente no SQL Server. O servidor vinculado chamado SALESFORCE ainda não foi criado e, portanto, o SQL Server não consegue localizá-lo:
BEGIN TRY
    EXEC('SELECT * FROM OPENQUERY(SALESFORCE, ''SELECT * FROM LEASE'')')
END TRY
BEGIN CATCH 
    PRINT 'This is the error: ' + error_message()
END CATCH
This is the error: Could not find server 'SALESFORCE' in sys.servers. Verify that
the correct server name was specified. If necessary, execute the stored procedure
sp_addlinkedserver to add the server to sys.servers.

O próximo erro ocorre na camada Microsoft OLE DB Provider for ODBC Drivers. O servidor vinculado chamado SALESFORCE faz referência a uma fonte de dados ODBC que contém os detalhes da conexão para o servidor Salesforce.com de destino. No entanto, o SQL Server é de 64 bits, mas a fonte de dados ODBC foi configurada no Administrador ODBC de 32 bits. A conexão falha com um erro de "incompatibilidade de arquitetura"
OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
"[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture
mismatch between the Driver and Application".
This is the error: Cannot initialize the data source object of OLE DB provider
"MSDASQL" for linked server "SALESFORCE".

Observe que a interpretação do SQL Server do erro OLE DB foi detectada pelo CATCH quadra. O erro "bruto" da camada OLEDB não.

Esse erro final ocorre na camada ODBC usada para se conectar ao Salesforce.com. A consulta selecionada faz referência a um objeto personalizado do Salesforce.com ("LEASE") que ainda não foi ativado e preenchido. "[Easysoft ODBC]Base table or view LEASE not found" é um erro do driver ODBC, que é passado e exibido pelo Microsoft OLE DB Provider for ODBC Drivers. Como no exemplo anterior, esta mensagem não é interceptável, a interpretação da mensagem pelo SQL Server é interceptável.
OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
"[Easysoft ODBC]Base table or view LEASE not found".
This is the error: An error occurred while preparing the query
"SELECT * FROM LEASE" for execution against OLE DB provider "MSDASQL" for linked
server "SALESFORCE".

Para obter mais informações sobre o tratamento de erros do SQL Server com e sem servidores vinculados, consulte:

http://www.sommarskog.se/error_handling/Part1.html