Zobacz to pytanie na temat Stackoverflow:
Używam sterownika EasySoft ODBC do połączenia instancji SQL Server 2008 R2 Express z Interbase i mam trudności z uzyskaniem metadanych ze zdalnego serwera. Spoglądając w sieci, wszystkie główne sugestie wspominają użycie OPENQUERY zamiast składni czterech serwerów połączonych.
EG Moje obecne (problematyczne) podejście to ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Ale w niektórych tabelach pojawia się błąd podczas wywoływania widoku ...
Msg 7353, poziom 16, stan 1, wiersz 1 Dostawca OLE DB „MSDASQL” dla połączonego serwera „LBLIVE” dostarczył niespójne metadane. Podczas wykonywania dostarczono dodatkową kolumnę, której nie znaleziono w czasie kompilacji.
Ponadto niektórych widoków, których nie mogę nawet utworzyć, ponieważ otrzymuję następujące ...
Msg 7315, poziom 16, stan 1, wiersz 1 Dostawca OLE DB „MSDASQL” dla połączonego serwera „LBLIVE” zawiera wiele tabel pasujących do nazwy „„ SYSDBA ”.„ AUDIT_LBABKP ””.
Chociaż jest tylko jedna z wymienionych tabel.
Alternatywne podejście do przeszukiwania sieci wydaje się bardziej jak ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Więc moje pytanie brzmi: jeśli użyję OPENQUERY w mojej definicji widoku, czy SQL Server będzie w stanie zoptymalizować wynikowy SQL wysyłany do Interbase? Czy też naprawdę nie ma dużej różnicy między tymi dwoma podejściami?
Jest to temat przekrojowy i chciałby POV dba.
źródło