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:- A instância local do SQL Server.
- A interface do SQL Server usada para facilitar a conexão com o servidor remoto.
- 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