sql >> Databasteknik >  >> RDS >> Database

Fånga länkade serverfel

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:

  1. Den lokala SQL Server-instansen.
  2. SQL Server-gränssnittet som används för att underlätta anslutningen till fjärrservern.
  3. 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


  1. Entity Framework wizard kraschar på MySQL

  2. SQLiteException:Tabell finns redan

  3. SQL Server 2005 - Exportera tabell programmatiskt (kör en .sql-fil för att bygga om den)

  4. FÖR XML PATH(''):Escapende specialtecken