Was ist eine "heterogene Abfrage"?

14

Ich habe die folgende Fehlermeldung bezüglich einer SQL-Abfrage erhalten, die ich in einem Programm ausführe. SQL Server 2005 T-SQL.

Heterogene Abfragen erfordern die ANSI_NULLSund ANSI_WARNINGSOptionen für die Verbindung eingestellt werden. Dies stellt eine konsistente Abfragesemantik sicher. Aktivieren Sie diese Optionen und geben Sie Ihre Abfrage erneut aus. (Schweregrad 16)

Das zu beheben ist einfach, festgelegt ANSI_NULLSund ANSI_WARNINGS ON, aber ich wollte wissen, was eine heterogene Abfrage ist. Bei einer Google-Suche werden Dutzende von Ergebnissen angezeigt, die mich dazu auffordern, Einstellungen vorzunehmen, ANSI_NULLSund ANSI_WARNINGSnichts, was den Begriff erklärt. Die Abfrage lautet:

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

Ich denke, dies liegt an der Verbindung mit mehreren Datenbankmodulen in einer Abfrage, da ich diesen Fehler sonst nie erhalten habe.
Bezieht sich "heterogen" in diesem Zusammenhang nur auf die Abfrage von zwei verschiedenen Datenbankmodulen?

Ben Brocka
quelle

Antworten:

8

Bezieht sich "heterogen" in diesem Zusammenhang nur auf die Abfrage von zwei verschiedenen Datenbankmodulen?

Grundsätzlich ja. Eine "heterogene" Abfrage wird auf einem "heterogenen Verbindungsserver" ausgeführt. Alle Anfragen an diesen Verbindungsserver sind heterogen.

Und "heterogen" ist eine Teilmenge verteilter Abfragen

  • In mehreren Instanzen von SQL Server gespeicherte verteilte Daten.
  • Heterogene Daten, die in verschiedenen relationalen und nicht relationalen Datenquellen gespeichert sind, auf die über einen OLE DB-Anbieter zugegriffen wird.

Aber ab und zu taucht "heterogen" auf:

Siehe Verknüpfen von Servern auf MSDN

Die Möglichkeit, verteilte Abfragen, Aktualisierungen, Befehle und Transaktionen für heterogene Datenquellen im gesamten Unternehmen auszuführen .

sp_addlinkedserver

Ein Verbindungsserver ermöglicht den Zugriff auf verteilte, heterogene Abfragen für OLE DB-Datenquellen.

Und ein MSDN-Beispiel für die Abfrage von Active Directory in "Zusammenführen heterogener Daten"

Und MSDN wieder "Heterogene Datenbankreplikation"

gbn
quelle
6

Nach meinem besten Wissen ja.

Ein Problem, das ich bei Ihrer Abfrage sehe, ist, dass Sie nicht wissen können, welche Zeile von Ihrer verknüpften Tabelle zurückkommt. Ist das nur Dummy-Code oder ist Ihre Anfrage so geschrieben?

mrdenny
quelle
Es ist Dummy-Code, es gibt eine einzelne Spalte, die ich aus 40 Datenbanken abrufe und in einer "Statusbericht" -Tabelle mit genau diesen Werten speichere.
Ben Brocka
1
Oh ok. Ich wollte nur sicherstellen, dass Sie wissen, dass der Wert, der in diese Spalte in Srv.db.dbo.table geschrieben wird, je nach der Version von SQL Server, auf der Sie den Code ausführen, unterschiedlich sein kann. Insbesondere von SQL 2005 bis SQL 2008 erhalten Sie mit dem bereitgestellten Code einen anderen Wert.
Mrdenny
Jetzt haben Sie mich interessiert, was ist das potenzielle Problem, nur dass ich nicht weiß, welche einzelne Zeile ich bekomme? Die Tabelle hat in diesem Fall nur eine einzige Zeile, weshalb die Unterabfrage kein WHERE enthält.
Ben Brocka
Wenn die Tabelle mehrere Zeilen enthält, erhalten Sie mit SQL 2005 die erste Zeile. Mit SQL 2008 würde die neue Tabelle die zweite Zeile erhalten. (Ich könnte das rückwärts haben.)
Mrdenny
Ich hätte gerne einen Artikel von MS gelesen, in dem genau erklärt wurde, was eine "heterogene Abfrage" wirklich ist, aber es scheint, als gäbe es so etwas nicht, und ich markiere dies als richtig.
Ben Brocka
1

Heterogen heißt einfach anders. Eine heterogene Abfrage befindet sich also in einer Datenbank und fragt eine VERSCHIEDENE Datenbank ab. Da die Datenbanken unterschiedlich sind, kann es vorkommen, dass die Einstellungen unterschiedlich sind, was zu anderen Ergebnissen führen kann als beabsichtigt.

Robert Harrison
quelle