O que é uma "consulta heterogênea"?

14

Recebi a seguinte mensagem de erro sobre uma consulta SQL que estou executando em um programa. SQL Server 2005 T-SQL.

Consultas heterogêneas requerem a ANSI_NULLSe ANSI_WARNINGSopções a serem definidas para a conexão. Isso garante semântica de consulta consistente. Habilite essas opções e emita novamente sua consulta. (gravidade 16)

Corrigir é fácil, definido ANSI_NULLSe ANSI_WARNINGS ON, mas eu queria saber o que é uma consulta heterogênea. Uma pesquisa no Google traz dezenas de resultados dizendo-me para definir ANSI_NULLSe ANSI_WARNINGS, nada explicando o que o termo significa. A consulta é:

UPDATE SRV.DB.DBO.TABLE SET Column=
            (SELECT Column 
            FROM SRV1.DB.DBO.TABLE)

Estou pensando que isso se deve à conexão com vários mecanismos de banco de dados em uma consulta, pois nunca recebi esse erro de outra forma.
"Heterogêneo" se refere apenas à consulta de dois mecanismos de banco de dados diferentes nesse contexto?

Ben Brocka
fonte

Respostas:

8

"Heterogêneo" se refere apenas à consulta de dois mecanismos de banco de dados diferentes nesse contexto?

Basicamente sim. Uma consulta "heterogênea" é executada em um "servidor vinculado heterogêneo". Todas as consultas para este servidor vinculado serão heterogêneas.

E "heterogêneo" é um subconjunto de consultas distribuídas

  • Dados distribuídos armazenados em várias instâncias do SQL Server.
  • Dados heterogêneos armazenados em várias fontes de dados relacionais e não relacionais acessadas usando um provedor OLE DB.

Mas "heterogêneo" aparece de vez em quando:

Consulte a vinculação de servidores no MSDN

A capacidade de emitir consultas distribuídas, atualizações, comandos e transações em fontes de dados heterogêneas em toda a empresa.

sp_addlinkedserver

Um servidor vinculado permite o acesso a consultas heterogêneas distribuídas em fontes de dados OLE DB.

E um exemplo do MSDN de consultar o Active Directory em "Juntando Dados Heterogêneos"

E o MSDN novamente "Replicação de banco de dados heterogêneo"

gbn
fonte
6

Que eu saiba, sim.

Um problema que vejo com sua consulta é que você não tem como saber qual linha retornará da sua tabela vinculada. Este é apenas um código fictício ou sua consulta está escrita dessa maneira?

mrdenny
fonte
É um código fictício, há uma única coluna que estou buscando em 40 bancos de dados e salvando em uma tabela "relatório de status" com apenas esses valores.
Ben Brocka
1
Ah ok. Só queria ter certeza de que você sabia que o valor inserido nessa coluna no Srv.db.dbo.table poderia ser diferente dependendo da versão do SQL Server em que você está executando o código. Especificamente do SQL 2005 ao SQL 2008, usando o código publicado, você obterá um valor diferente.
Mrdenny
Agora você me interessou, qual é o problema em potencial, só que eu não sei qual linha única estou recebendo? A tabela possui apenas uma linha neste caso, motivo pelo qual não há WHERE na subconsulta.
Ben Brocka
Se havia várias linhas na tabela, com o SQL 2005 você obtém a primeira linha. Com o SQL 2008, a nova tabela obteria a segunda linha. (Eu poderia ter que para trás.)
mrdenny
Eu adoraria um artigo do MS explicando exatamente o que realmente é uma "consulta heterogênea", mas parece que tal coisa não existe, então estou marcando isso como correto.
Ben Brocka 05/10
1

Heterogêneo significa apenas diferente. Portanto, uma consulta heterogênea está em um banco de dados e está consultando um banco de dados DIFERENTE. Como os bancos de dados são diferentes, traz a possibilidade de as configurações serem diferentes, o que poderia causar resultados diferentes do que se pretendia.

Robert Harrison
fonte