Por favor, veja esta pergunta no stackoverflow:
Estou usando um driver EasySoft ODBC para vincular uma instância do SQL Server 2008 R2 Express ao Interbase e estou tendo alguma dificuldade em obter metadados do servidor remoto. Ao procurar na rede, todas as principais sugestões mencionam o uso de OPENQUERY em vez da sintaxe de servidor vinculado de quatro partes.
EG Minha abordagem atual (problemática) é...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Porém em algumas tabelas recebo o erro ao chamar a view...
Msg 7353, Nível 16, Estado 1, Linha 1 O provedor OLE DB "MSDASQL" para o servidor vinculado "LBLIVE" forneceu metadados inconsistentes. Uma coluna extra foi fornecida durante a execução que não foi encontrada no tempo de compilação.
Além disso, algumas exibições que não consigo criar porque recebo o seguinte ...
Msg 7315, Nível 16, Estado 1, Linha 1 O provedor OLE DB "MSDASQL" para o servidor vinculado "LBLIVE" contém várias tabelas que correspondem ao nome ""SYSDBA"."AUDIT_LBABKP"".
Embora haja apenas uma das tabelas mencionadas.
A abordagem alternativa de pesquisar na net parece ser mais como...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Então, minha pergunta é, se eu usar OPENQUERY na minha definição de exibição, o SQL Server será capaz de otimizar o SQL resultante enviado ao Interbase? Ou realmente não há muita diferença entre as duas abordagens?
É um assunto cruzado e adoraria o ponto de vista de um dba.