SQL Server giver en TRY CATCH
mekanisme for at gøre det muligt for en applikation at indse, at noget er gået galt, og udføre passende kode for at håndtere problemet. For eksempel:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Koden i TRY
blok udføres først. Hvis der opstår en fejl, sendes eksekveringen til CATCH
blokere.
Hvad er implikationerne for fejlhåndtering, hvis du vil bruge TRY CATCH
med en tilknyttet server? I denne situation kan der opstå en fejl i:
- Den lokale SQL Server-instans.
- SQL Server-grænsefladen, der bruges til at lette forbindelsen med fjernserveren.
- Grænsefladen, der bruges til at gøre fjernserveren tilgængelig for SQL Server.
Vores eksempelopsætning vil bruge en Salesforce.com-server som fjernserver. For denne fjernservertype, grænseflade 2. er Microsoft OLE DB Provider til ODBC-drivere og grænseflade 3. er Easysofts Salesforce.com ODBC-driver.
Følgende fejl opstår lokalt i SQL Server. Den tilknyttede server med navnet SALESFORCE
er endnu ikke blevet oprettet, så SQL Server er ikke i stand til at finde 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.
Den næste fejl opstår i laget Microsoft OLE DB Provider for ODBC Drivers. Den tilknyttede server med navnet SALESFORCE
refererer til en ODBC-datakilde, der indeholder forbindelsesdetaljerne for mål-Salesforce.com-serveren. SQL Server er dog 64-bit, men ODBC-datakilden er sat op i 32-bit ODBC-administratoren. Forbindelsen mislykkes med fejlen "arkitektur mismatch"
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".
Bemærk, at SQL Servers fortolkning af OLE DB-fejlen er blevet fanget af CATCH
blok. Den "rå" fejl fra OLEDB-laget har ikke.
Denne sidste fejl opstår i ODBC-laget, der bruges til at oprette forbindelse til Salesforce.com. Select-forespørgslen refererer til et tilpasset Salesforce.com-objekt ("LEASE"), der endnu ikke er blevet aktiveret og udfyldt. "[Easysoft ODBC]Basistabel eller visning LEASE ikke fundet" er en fejl fra ODBC-driveren, som sendes til og vises af Microsoft OLE DB-udbyderen for ODBC-drivere. Som i det foregående eksempel kan denne meddelelse ikke fældes, SQL Servers fortolkning af meddelelsen kan fældes.
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".
For mere information om SQL Server-fejlhåndtering både med og uden linkede servere, se:
http://www.sommarskog.se/error_handling/Part1.html