Database
 sql >> Database >  >> RDS >> Database

Intercettazione degli errori del server collegato

SQL Server fornisce un TRY CATCH meccanismo per consentire a un'applicazione di rendersi conto che qualcosa è andato storto ed eseguire il codice appropriato per gestire il problema. Ad esempio:

BEGIN TRY
   <some code>
END TRY
BEGIN CATCH 
   PRINT 'This is the error: ' + error_message()
END CATCH

Il codice in TRY il blocco viene eseguito per primo. Se si verifica un errore, l'esecuzione viene passata a CATCH blocco.

Quali sono le implicazioni per la gestione degli errori se si desidera utilizzare TRY CATCH con un server collegato? In questa situazione, può verificarsi un errore in:

  1. L'istanza locale di SQL Server.
  2. L'interfaccia di SQL Server utilizzata per facilitare la connessione con il server remoto.
  3. L'interfaccia utilizzata per rendere il server remoto accessibile a SQL Server.

La nostra configurazione di esempio utilizzerà un server Salesforce.com come server remoto. Per questo tipo di server remoto, interfaccia 2. è il provider Microsoft OLE DB per i driver ODBC e l'interfaccia 3. è il driver ODBC di Salesforce.com di Easysoft.

L'errore seguente si verifica localmente in SQL Server. Il server collegato denominato SALESFORCE non è stato ancora creato e quindi SQL Server non è in grado di individuarlo:

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.

L'errore successivo si verifica nel provider Microsoft OLE DB per il livello di driver ODBC. Il server collegato denominato SALESFORCE fa riferimento a un'origine dati ODBC che contiene i dettagli di connessione per il server Salesforce.com di destinazione. Tuttavia, SQL Server è a 64 bit ma l'origine dati ODBC è stata impostata nell'amministratore ODBC a 32 bit. La connessione non riesce con un errore di "mancata corrispondenza dell'architettura"

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".

Si noti che l'interpretazione di SQL Server dell'errore OLE DB è stata intercettata da CATCH bloccare. L'errore "grezzo" del livello OLEDB non ha.

Questo errore finale si verifica nel livello ODBC utilizzato per la connessione a Salesforce.com. La query di selezione fa riferimento a un oggetto Salesforce.com personalizzato ("LEASE") che non è stato ancora abilitato e popolato. "[Easysoft ODBC]Tabella di base o vista LEASE non trovata" è un errore del driver ODBC, che viene passato e visualizzato dal provider Microsoft OLE DB per i driver ODBC. Come nell'esempio precedente, questo messaggio non è intercettabile, l'interpretazione del messaggio di SQL Server è intercettabile.

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".

Per ulteriori informazioni sulla gestione degli errori di SQL Server con e senza server collegati, vedere:

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