sql >> Base de Datos >  >> RDS >> Database

Captura de errores del servidor vinculado

SQL Server proporciona un TRY CATCH mecanismo para permitir que una aplicación se dé cuenta de que algo salió mal y ejecute el código apropiado para manejar el problema. Por ejemplo:

BEGIN TRY
   <some code>
END TRY
BEGIN CATCH 
   PRINT 'This is the error: ' + error_message()
END CATCH

El código en el TRY bloque se ejecuta primero. Si ocurre un error, la ejecución pasa a CATCH bloquear.

¿Cuáles son las implicaciones para el manejo de errores si desea utilizar TRY CATCH con un servidor vinculado? En esta situación, puede ocurrir un error en:

  1. La instancia local de SQL Server.
  2. La interfaz de SQL Server utilizada para facilitar la conexión con el servidor remoto.
  3. La interfaz utilizada para hacer que el servidor remoto sea accesible para SQL Server.

Nuestra configuración de ejemplo utilizará un servidor de Salesforce.com como servidor remoto. Para este tipo de servidor remoto, interfaz 2. es el proveedor Microsoft OLE DB para la interfaz y los controladores ODBC 3. es el controlador ODBC de Salesforce.com de Easysoft.

El siguiente error se produce localmente en SQL Server. El servidor vinculado llamado SALESFORCE aún no se ha creado, por lo que SQL Server no puede localizarlo:

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.

El siguiente error se produce en el proveedor de Microsoft OLE DB para la capa de controladores ODBC. El servidor vinculado llamado SALESFORCE hace referencia a una fuente de datos ODBC que contiene los detalles de conexión para el servidor de destino de Salesforce.com. Sin embargo, SQL Server es de 64 bits, pero la fuente de datos ODBC se configuró en el Administrador de ODBC de 32 bits. La conexión falla con un error de "desajuste de arquitectura"

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".

Tenga en cuenta que la interpretación de SQL Server del error OLE DB ha sido capturada por CATCH cuadra. El error "en bruto" de la capa OLEDB no lo ha hecho.

Este error final ocurre en la capa ODBC utilizada para conectarse a Salesforce.com. La consulta de selección hace referencia a un objeto personalizado de Salesforce.com ("ALQUILER") que aún no se ha habilitado ni completado. "[Easysoft ODBC]Tabla base o vista ARRENDAMIENTO no encontrada" es un error del controlador ODBC, que pasa y se muestra en el proveedor Microsoft OLE DB para controladores ODBC. Como en el ejemplo anterior, este mensaje no es interceptable, la interpretación del mensaje de SQL Server es interceptable.

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".

Para obtener más información sobre el manejo de errores de SQL Server con y sin servidores vinculados, consulte:

http://www.sommarskog.se/error_handling/Part1.html