SQL Server предоставя TRY CATCH
механизъм, който позволява на приложението да осъзнае, че нещо се е объркало и да изпълни подходящ код за справяне с проблема. Например:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Кодът в TRY
блок се изпълнява първи. Ако възникне грешка, изпълнението се предава на CATCH
блок.
Какви са последиците за обработката на грешки, ако искате да използвате TRY CATCH
със свързан сървър? В тази ситуация може да възникне грешка в:
- Локалният екземпляр на SQL Server.
- Интерфейсът на SQL Server, използван за улесняване на връзката с отдалечения сървър.
- Интерфейсът, използван, за да направи отдалечения сървър достъпен за SQL Server.
Нашата примерна настройка ще използва сървър Salesforce.com като отдалечен сървър. За този тип отдалечен сървър, интерфейс 2. е доставчикът на Microsoft OLE DB за ODBC драйвери и интерфейс 3. е ODBC драйверът на Easysoft Salesforce.com.
Следната грешка възниква локално в SQL Server. Свързаният сървър с име SALESFORCE
все още не е създаден и затова SQL Server не може да го намери:
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.
Следващата грешка възниква в слоя на доставчика на Microsoft OLE DB за ODBC драйвери. Свързаният сървър с име SALESFORCE
препраща към ODBC източник на данни, който съдържа подробностите за връзката за целевия сървър Salesforce.com. Въпреки това, SQL Server е 64-битов, но източникът на ODBC данни е настроен в 32-битовия ODBC администратор. Връзката е неуспешна с грешка „несъответствие на архитектурата“
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".
Обърнете внимание, че интерпретацията на SQL Server на грешката OLE DB е била уловена от CATCH
блок. „Необработената“ грешка от слоя OLEDB няма.
Тази последна грешка възниква в слоя ODBC, използван за свързване към Salesforce.com. Заявката за избор препраща към персонализиран обект Salesforce.com („LEASE“), който все още не е активиран и попълнен. „[Easysoft ODBC]Основна таблица или изглед LEASE не са намерени“ е грешка от ODBC драйвера, която се предава на и се показва от доставчика на Microsoft OLE DB за ODBC драйвери. Както в предишния пример, това съобщение не може да се хване, интерпретацията на съобщението от SQL Server може да се хване.
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".
За повече информация относно обработката на грешки в SQL Server както със, така и без свързани сървъри вижте:
http://www.sommarskog.se/error_handling/Part1.html