Por favor, veja esta pergunta no stackoverflow:
Estou usando um driver ODBC EasySoft para vincular uma instância do SQL Server 2008 R2 Express à Interbase e estou tendo algumas dificuldades em obter metadados do servidor remoto. Ao olhar na rede, as principais sugestões mencionam o OPENQUERY, em vez da sintaxe do servidor vinculado em quatro partes.
EG Minha abordagem atual (problemática) é ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Mas em algumas tabelas, recebo o erro ao chamar a visualização ...
Mensagem 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 visualizações que não consigo criar, porque recebo o seguinte ...
Mensagem 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 exista apenas uma das tabelas mencionadas.
A abordagem alternativa de pesquisar na rede parece ser mais como ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Portanto, minha pergunta é: se eu usar OPENQUERY na minha definição de exibição, o SQL Server poderá otimizar o SQL resultante que está sendo enviado para o Interbase? Ou realmente não há muita diferença entre as duas abordagens?
É um assunto sobre o assunto e adoraria o ponto de vista de um dba.
fonte