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:
- L'istanza locale di SQL Server.
- L'interfaccia di SQL Server utilizzata per facilitare la connessione con il server remoto.
- 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