SQL Server poskytuje TRY CATCH
mechanismus, který aplikaci umožní uvědomit si, že se něco pokazilo, a spustit příslušný kód, který problém vyřeší. Například:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Kód v TRY
blok se provede jako první. Pokud dojde k chybě, provedení je předáno CATCH
blokovat.
Jaké jsou důsledky pro zpracování chyb, pokud chcete použít TRY CATCH
s propojeným serverem? V této situaci může dojít k chybě v:
- Místní instance SQL Server.
- Rozhraní serveru SQL slouží k usnadnění připojení ke vzdálenému serveru.
- Rozhraní používané ke zpřístupnění vzdáleného serveru pro SQL Server.
Naše příkladné nastavení použije jako vzdálený server server Salesforce.com. Pro tento typ vzdáleného serveru rozhraní 2. je Microsoft OLE DB Provider pro ovladače a rozhraní ODBC 3. je ovladač ODBC Salesforce.com společnosti Easysoft.
K následující chybě dochází místně na serveru SQL Server. Propojený server s názvem SALESFORCE
ještě nebyl vytvořen, a tak jej SQL Server nemůže najít:
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.
K další chybě dochází ve vrstvě Microsoft OLE DB Provider pro ovladače ODBC. Propojený server s názvem SALESFORCE
odkazuje na zdroj dat ODBC, který obsahuje podrobnosti o připojení pro cílový server Salesforce.com. SQL Server je však 64bitový, ale zdroj dat ODBC byl nastaven v 32bitovém správci ODBC. Připojení se nezdaří s chybou „neshoda architektury“
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".
Všimněte si, že interpretace chyby OLE DB SQL Serverem byla zachycena CATCH
blok. "Syrová" chyba z vrstvy OLEDB nemá.
K této poslední chybě dochází ve vrstvě ODBC používané k připojení k Salesforce.com. Výběrový dotaz odkazuje na vlastní objekt Salesforce.com („LEASE“), který ještě nebyl povolen a naplněn. "[Easysoft ODBC]Základní tabulka nebo zobrazení LEASE nenalezeno" je chyba ovladače ODBC, která je předána a zobrazena poskytovatelem Microsoft OLE DB Provider pro ovladače ODBC. Stejně jako v předchozím příkladu tato zpráva není zachytitelná, interpretace zprávy SQL Serverem je zachytitelná.
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".
Další informace o zpracování chyb serveru SQL Server s propojenými servery i bez nich naleznete na adrese:
http://www.sommarskog.se/error_handling/Part1.html