Будь ласка, дивіться це запитання на сайті stackoverflow:
Я використовую драйвер EasySoft ODBC, щоб зв’язати екземпляр SQL Server 2008 R2 Express з Interbase, і у мене виникли труднощі з отриманням метаданих з віддаленого сервера. З огляду на мережу в основних домаганнях всі згадуються про використання OPENQUERY замість синтаксису сервера з чотирма частинами.
EG Мій поточний (проблемний) підхід - це ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Але в деяких таблицях я отримую помилку під час виклику представлення ...
Посилання 7353, рівень 16, стан 1, рядок 1 Постачальник OLE DB "MSDASQL" для пов'язаного сервера "LBLIVE" надає непослідовні метадані. Під час виконання було надано додатковий стовпчик, який не був знайдений під час компіляції.
Також деякі погляди я навіть не можу створити, оскільки я отримую наступне ...
Msg 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 POV.