SQL Server udostępnia TRY CATCH
mechanizm umożliwiający aplikacji zorientowanie się, że coś poszło nie tak i wykonanie odpowiedniego kodu w celu rozwiązania problemu. Na przykład:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Kod w TRY
blok jest wykonywany jako pierwszy. Jeśli wystąpi błąd, wykonanie jest przekazywane do CATCH
blokować.
Jakie są konsekwencje obsługi błędów, jeśli chcesz użyć TRY CATCH
? z połączonym serwerem? W takiej sytuacji może wystąpić błąd w:
- Lokalna instancja serwera SQL.
- Interfejs SQL Server używany do ułatwienia połączenia ze zdalnym serwerem.
- Interfejs używany do udostępniania zdalnego serwera SQL Server.
Nasza przykładowa konfiguracja użyje serwera Salesforce.com jako serwera zdalnego. Dla tego typu serwera zdalnego interfejs 2. jest dostawcą Microsoft OLE DB dla sterowników ODBC i interfejsu 3. jest sterownikiem ODBC firmy Easysoft Salesforce.com.
Następujący błąd występuje lokalnie w programie SQL Server. Połączony serwer o nazwie SALESFORCE
nie został jeszcze utworzony, więc SQL Server nie może go zlokalizować:
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.
Następny błąd występuje w warstwie Microsoft OLE DB Provider for ODBC Drivers. Połączony serwer o nazwie SALESFORCE
odwołuje się do źródła danych ODBC, które zawiera szczegóły połączenia z docelowym serwerem Salesforce.com. Jednak SQL Server jest 64-bitowy, ale źródło danych ODBC zostało skonfigurowane w 32-bitowym Administratorze ODBC. Połączenie kończy się niepowodzeniem z powodu błędu „niezgodności 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".
Zauważ, że interpretacja błędu OLE DB przez SQL Server została przechwycona przez CATCH
blok. Błąd „surowy” z warstwy OLEDB nie.
Ten ostatni błąd występuje w warstwie ODBC używanej do łączenia się z Salesforce.com. Zapytanie wybierające odwołuje się do niestandardowego obiektu Salesforce.com („LEASE”), który nie został jeszcze włączony i wypełniony. „Nie znaleziono tabeli podstawowej lub widoku [Easysoft ODBC] LEASE” jest błędem sterownika ODBC, który jest przesyłany do dostawcy Microsoft OLE DB dla sterowników ODBC i przez niego wyświetlany. Podobnie jak w poprzednim przykładzie, komunikat ten nie jest trappable, interpretacja komunikatu SQL Server jest 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".
Aby uzyskać więcej informacji na temat obsługi błędów SQL Server zarówno z połączonymi serwerami, jak i bez nich, zobacz:
http://www.sommarskog.se/error_handling/Part1.html