SQL Server tillhandahåller en TRY CATCH
mekanism för att göra det möjligt för en applikation att inse att något har gått fel och exekvera lämplig kod för att hantera problemet. Till exempel:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Koden i TRY
blocket exekveras först. Om ett fel uppstår skickas exekveringen till CATCH
blockera.
Vilka är konsekvenserna för felhantering om du vill använda TRY CATCH
med en länkad server? I den här situationen kan ett fel uppstå i:
- Den lokala SQL Server-instansen.
- SQL Server-gränssnittet som används för att underlätta anslutningen till fjärrservern.
- Gränssnittet som används för att göra fjärrservern tillgänglig för SQL Server.
Vårt exempel kommer att använda en Salesforce.com-server som fjärrserver. För denna fjärrservertyp, gränssnitt 2. är Microsoft OLE DB-leverantör för ODBC-drivrutiner och gränssnitt 3. är Easysofts Salesforce.com ODBC-drivrutin.
Följande fel uppstår lokalt i SQL Server. Den länkade servern med namnet SALESFORCE
har ännu inte skapats och så SQL Server kan inte hitta den:
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.
Nästa fel inträffar i lagret Microsoft OLE DB Provider for ODBC Drivers. Den länkade servern med namnet SALESFORCE
refererar till en ODBC-datakälla som innehåller anslutningsdetaljerna för målservern Salesforce.com. SQL Server är dock 64-bitars men ODBC-datakällan har ställts in i 32-bitars ODBC-administratören. Anslutningen misslyckas med ett "arkitekturfel"-fel
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".
Observera att SQL Servers tolkning av OLE DB-felet har fångats av CATCH
blockera. Det "råa" felet från OLEDB-lagret har inte.
Detta sista fel inträffar i ODBC-lagret som används för att ansluta till Salesforce.com. Select-frågan refererar till ett anpassat Salesforce.com-objekt ("LEASE") som ännu inte har aktiverats och fyllts i. "[Easysoft ODBC]Bastabell eller vy LEASE hittades inte" är ett fel från ODBC-drivrutinen, som skickas till och visas av Microsoft OLE DB Provider för ODBC-drivrutiner. Liksom i föregående exempel är det här meddelandet inte fällbart, SQL Servers tolkning av meddelandet är fällbart.
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".
För mer information om SQL Server-felhantering både med och utan länkade servrar, se:
http://www.sommarskog.se/error_handling/Part1.html