Database
 sql >> база данни >  >> RDS >> Database

Улавяне на грешки в свързания сървър

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 със свързан сървър? В тази ситуация може да възникне грешка в:

  1. Локалният екземпляр на SQL Server.
  2. Интерфейсът на SQL Server, използван за улесняване на връзката с отдалечения сървър.
  3. Интерфейсът, използван, за да направи отдалечения сървър достъпен за 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да извлечем набор от знаци с помощта на SUBSTRING в SQL?

  2. Съвпадение на модела:По-забавно, когато бях дете

  3. UML нотация

  4. Как да съхранявате графиците на служителите в база данни

  5. Свързване на IBM DB2 с IRI софтуер