SQL Server biedt een TRY CATCH
mechanisme om een toepassing in staat te stellen te beseffen dat er iets mis is gegaan en de juiste code uit te voeren om het probleem op te lossen. Bijvoorbeeld:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
De code in de TRY
blok wordt eerst uitgevoerd. Als er een fout optreedt, wordt de uitvoering doorgegeven aan de CATCH
blok.
Wat zijn de implicaties voor foutafhandeling als u TRY CATCH
wilt gebruiken? met een gekoppelde server? In deze situatie kan er een fout optreden in:
- De lokale SQL Server-instantie.
- De SQL Server-interface die wordt gebruikt om de verbinding met de externe server te vergemakkelijken.
- De interface die wordt gebruikt om de externe server toegankelijk te maken voor SQL Server.
In onze voorbeeldconfiguratie wordt een Salesforce.com-server als externe server gebruikt. Voor dit externe servertype, interface 2. is de Microsoft OLE DB-provider voor ODBC-stuurprogramma's en interface 3. is de Salesforce.com ODBC-driver van Easysoft.
De volgende fout treedt lokaal op in SQL Server. De gekoppelde server met de naam SALESFORCE
is nog niet gemaakt en daarom kan SQL Server het niet vinden:
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.
De volgende fout treedt op in de laag Microsoft OLE DB Provider for ODBC Drivers. De gekoppelde server met de naam SALESFORCE
verwijst naar een ODBC-gegevensbron die de verbindingsdetails voor de doelserver van Salesforce.com bevat. SQL Server is echter 64-bits, maar de ODBC-gegevensbron is ingesteld in de 32-bits ODBC-beheerder. De verbinding mislukt met een "architectuur komt niet overeen"-fout
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".
Merk op dat de interpretatie van de OLE DB-fout door SQL Server is opgevangen door de CATCH
blok. De "ruwe" fout van de OLEDB-laag heeft dat niet.
Deze laatste fout treedt op in de ODBC-laag die wordt gebruikt om verbinding te maken met Salesforce.com. De selectiequery verwijst naar een aangepast Salesforce.com-object ("LEASE") dat nog niet is ingeschakeld en ingevuld. "[Easysoft ODBC]Base table or view LEASE not found" is een fout van het ODBC-stuurprogramma, dat wordt doorgegeven aan en weergegeven door de Microsoft OLE DB-provider voor ODBC-stuurprogramma's. Net als in het vorige voorbeeld is dit bericht niet trappable, de interpretatie van het bericht door SQL Server is wel trappable.
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".
Voor meer informatie over SQL Server-foutafhandeling, zowel met als zonder gekoppelde servers, zie:
http://www.sommarskog.se/error_handling/Part1.html