Пожалуйста, посмотрите этот вопрос на stackoverflow:
Я использую драйвер EasySoft ODBC для связи экземпляра SQL Server 2008 R2 Express с Interbase, и у меня возникают трудности с получением метаданных с удаленного сервера. При поиске в сети все основные предложения упоминают об использовании OPENQUERY вместо синтаксиса четырехкомпонентного связанного сервера.
Например, мой текущий (проблемный) подход ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Но на некоторых таблицах я получаю ошибку при вызове представления ...
Сообщение 7353, уровень 16, состояние 1, строка 1 Поставщик OLE DB "MSDASQL" для связанного сервера "LBLIVE" предоставил несогласованные метаданные. Во время выполнения был предоставлен дополнительный столбец, который не был найден во время компиляции.
Кроме того, некоторые виды я даже не могу создать, потому что получаю следующее ...
Сообщение 7315, уровень 16, состояние 1, строка 1 Поставщик OLE DB "MSDASQL" для связанного сервера "LBLIVE" содержит несколько таблиц, которые соответствуют имени "" SYSDBA "." AUDIT_LBABKP "".
Хотя есть только одна из упомянутых таблиц.
Альтернативный подход от поиска в сети, похоже, больше похож на ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Итак, мой вопрос: если я использую OPENQUERY в своем определении представления, сможет ли SQL Server оптимизировать полученный SQL-запрос, отправляемый в Interbase? Или на самом деле нет большой разницы между этими двумя подходами?
Это пересекающаяся тема, и она хотела бы получить POV от dba.
источник