Si prega di vedere questa domanda su StackOverflow:
Sto usando un driver ODBC EasySoft per collegare un'istanza di SQL Server 2008 R2 Express a Interbase e ho qualche difficoltà con il recupero dei metadati dal server remoto. Guardando in rete, i principali suggerimenti suggeriscono l'utilizzo di OPENQUERY invece della sintassi del server collegato in quattro parti.
EG Il mio attuale approccio (problematico) è ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Ma su alcuni tavoli viene visualizzato l'errore quando si chiama la vista ...
Messaggio 7353, livello 16, stato 1, riga 1 Il provider OLE DB "MSDASQL" per il server collegato "LBLIVE" ha fornito metadati incoerenti. Durante l'esecuzione è stata fornita una colonna aggiuntiva che non è stata trovata al momento della compilazione.
Inoltre, alcune viste che non riesco nemmeno a creare perché ottengo il seguente ...
Messaggio 7315, livello 16, stato 1, riga 1 Il provider OLE DB "MSDASQL" per il server collegato "LBLIVE" contiene più tabelle che corrispondono al nome "" SYSDBA "." AUDIT_LBABKP "".
Anche se c'è solo una delle tabelle menzionate.
L'approccio alternativo alla ricerca in rete sembra essere più simile a ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Quindi, la mia domanda è: se uso OPENQUERY nella definizione della mia vista, SQL Server sarà in grado di ottimizzare l'SQL risultante inviato a Interbase? O non c'è davvero molta differenza tra i due approcci?
È un argomento trasversale e mi piacerebbe un POV di un dba.