¿Qué es una "consulta heterogénea"?

14

Recibí el siguiente mensaje de error con respecto a una consulta SQL que estoy ejecutando en un programa. SQL Server 2005 T-SQL.

Las consultas heterogéneas requieren que se establezcan las opciones ANSI_NULLSy ANSI_WARNINGSpara la conexión. Esto asegura una semántica de consulta consistente. Habilite estas opciones y luego vuelva a emitir su consulta. (gravedad 16)

Arreglarlo es fácil, configurado ANSI_NULLSy ANSI_WARNINGS ON, pero quería saber qué es una consulta heterogénea. Una búsqueda en Google muestra docenas de resultados que me dicen que configure ANSI_NULLSy ANSI_WARNINGSnada explica el significado del término. La consulta es:

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

Estoy pensando que esto se debe a la conexión a múltiples motores de base de datos en una consulta, ya que de lo contrario nunca he recibido este error.
¿"Heterogéneo" solo se refiere a consultar dos motores de bases de datos diferentes en este contexto?

Ben Brocka
fuente

Respuestas:

8

¿"Heterogéneo" solo se refiere a consultar dos motores de bases de datos diferentes en este contexto?

Básicamente sí. Una consulta "heterogénea" se ejecuta en un "servidor vinculado heterogéneo".Todas las consultas a este servidor vinculado serán heterogéneas.

Y "heterogéneo" es un subconjunto de consultas distribuidas

  • Datos distribuidos almacenados en múltiples instancias de SQL Server.
  • Datos heterogéneos almacenados en varias fuentes de datos relacionales y no relacionales a las que se accede mediante un proveedor OLE DB.

Pero aparece "heterogéneo" de vez en cuando:

Ver enlaces de servidores en MSDN

La capacidad de emitir consultas distribuidas, actualizaciones, comandos y transacciones en fuentes de datos heterogéneas en toda la empresa.

sp_addlinkedserver

Un servidor vinculado permite el acceso a distribuidos, heterogéneos consultas contra fuentes de datos OLE DB.

Y un ejemplo de MSDN de consultar Active Directory en "Unir datos heterogéneos"

Y MSDN nuevamente "Replicación de base de datos heterogénea"

gbn
fuente
6

Que yo sepa, sí.

Un problema que veo con su consulta es que no tiene forma de saber qué fila va a volver de su tabla vinculada. ¿Es solo un código ficticio o su consulta está escrita de esta manera?

mrdenny
fuente
Es un código ficticio, hay una sola columna que obtengo de 40 bases de datos y la guardo en una tabla de "informe de estado" de solo esos valores.
Ben Brocka
1
Oh ok Solo quería asegurarme de que sabía que el valor que se coloca en esa columna en Srv.db.dbo.table podría ser diferente dependiendo de la versión de SQL Server en la que esté ejecutando el código. Específicamente de SQL 2005 a SQL 2008 usando el código publicado obtendrá un valor diferente.
mrdenny
Ahora me tiene interesado, ¿cuál es el problema potencial, solo que no sé qué fila individual estoy obteniendo? La tabla solo tiene una sola fila en este caso, por lo que no hay WHERE en la subconsulta.
Ben Brocka
Si hubiera varias filas en la tabla, con SQL 2005 obtendrá la primera fila. Con SQL 2008, la nueva tabla obtendría la segunda fila. (Podría tener eso al revés.)
mrdenny
Me hubiera encantado un artículo de MS que explica exactamente qué es realmente una "consulta heterogénea", pero parece que tal cosa no existe, así que estoy marcando esto correctamente.
Ben Brocka
1

Heterogéneo solo significa diferente. Entonces, una consulta heterogénea está en una base de datos y está consultando una base de datos DIFERENTE. Dado que las bases de datos son diferentes, trae la posibilidad de que las configuraciones sean diferentes, lo que podría causar resultados diferentes a los previstos.

Robert Harrison
fuente