Recebi a seguinte mensagem de erro em relação a uma consulta SQL que estou executando em um programa. SQL Server 2005 T-SQL.
As consultas heterogêneas requerem que as opções
ANSI_NULLS
eANSI_WARNINGS
sejam definidas para a conexão. Isso garante uma semântica de consulta consistente. Ative essas opções e emita novamente sua consulta. (gravidade 16)
Consertar é fácil, set ANSI_NULLS
e ANSI_WARNINGS
ON
, mas eu queria saber o que é uma consulta heterogênea. Uma pesquisa no Google traz dezenas de resultados me dizendo para definir ANSI_NULLS
e 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" refere-se apenas à consulta de dois mecanismos de banco de dados diferentes neste contexto?
Basicamente, sim. Uma consulta "heterogênea" é executada em um "servidor vinculado heterogêneo". Todas as consultas a este servidor vinculado serão heterogêneas.
E "heterogêneo" é um subconjunto de consultas distribuídas
Mas "heterogêneo" aparece de vez em quando:
Consulte vinculando servidores no MSDN
sp_addlinkedserver
E um exemplo do MSDN de consulta do Active Directory em "Joining Heterogeneous Data"
E MSDN novamente "Replicação Heterogênea de Banco de Dados"
Pelo que sei sim.
Um problema que vejo com sua consulta é que você não tem como saber qual linha retornará de sua tabela vinculada. Isso é apenas um código fictício ou sua consulta foi escrita dessa maneira?
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, existe a possibilidade de as configurações serem diferentes, o que pode causar resultados diferentes do pretendido.