Por favor vea esta pregunta en stackoverflow:
Estoy usando un controlador ODBC EasySoft para vincular una instancia de SQL Server 2008 R2 Express a Interbase y tengo algunas dificultades para obtener metadatos del servidor remoto. Al mirar en la red, las principales sugerencias mencionan el uso de OPENQUERY en lugar de la sintaxis del servidor vinculado de cuatro partes.
EG Mi enfoque actual (problemático) es ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Pero en algunas tablas me sale el error al llamar a la vista ...
Mensaje 7353, Nivel 16, Estado 1, Línea 1 El proveedor OLE DB "MSDASQL" para el servidor vinculado "LBLIVE" proporcionó metadatos inconsistentes. Se suministró una columna adicional durante la ejecución que no se encontró en el momento de la compilación.
Además, algunas vistas que ni siquiera puedo crear porque obtengo lo siguiente ...
Mensaje 7315, nivel 16, estado 1, línea 1 El proveedor OLE DB "MSDASQL" para el servidor vinculado "LBLIVE" contiene varias tablas que coinciden con el nombre "" SYSDBA "." AUDIT_LBABKP "".
Aunque solo hay una de las tablas mencionadas.
El enfoque alternativo de buscar en la red parece ser más como ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Entonces, mi pregunta es, si uso OPENQUERY en mi definición de vista, ¿podrá SQL Server optimizar el SQL resultante que se envía a Interbase? ¿O realmente no hay mucha diferencia entre los dos enfoques?
Es un tema cruzado y me encantaría el POV de un dba.
fuente