Co to jest „zapytanie heterogeniczne”?

14

Otrzymałem następujący komunikat o błędzie dotyczący zapytania SQL, które uruchamiam w programie. SQL Server 2005 T-SQL.

Heterogeniczne zapytania wymagają ustawienia ANSI_NULLSi ANSI_WARNINGSopcji dla połączenia. Zapewnia to spójną semantykę zapytań. Włącz te opcje, a następnie ponownie uruchom zapytanie. (dotkliwość 16)

Naprawienie tego jest łatwe, ustawione ANSI_NULLSi ANSI_WARNINGS ON, ale chciałem wiedzieć, czym jest zapytanie heterogeniczne. Wyszukiwarka Google wyświetla dziesiątki wyników, które każą mi ustawić ANSI_NULLSi ANSI_WARNINGSnic nie wyjaśnia, co oznacza ten termin. Zapytanie to:

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

Myślę, że jest to spowodowane połączeniem się z wieloma silnikami baz danych w jednym zapytaniu, ponieważ w przeciwnym razie nigdy nie dostałem tego błędu.
Czy „heterogeniczny” odnosi się tylko do odpytywania dwóch różnych silników baz danych w tym kontekście?

Ben Brocka
źródło

Odpowiedzi:

8

Czy „heterogeniczny” odnosi się tylko do odpytywania dwóch różnych silników baz danych w tym kontekście?

Zasadniczo tak. „Heterogeniczne” zapytanie jest wykonywane na „heterogenicznym połączonym serwerze”. Wszystkie zapytania do tego połączonego serwera będą heterogeniczne.

A „heterogeniczny” jest podzbiorem rozproszonych zapytań

  • Rozproszone dane przechowywane w wielu instancjach SQL Server.
  • Dane heterogeniczne przechowywane w różnych relacyjnych i nierelacyjnych źródłach danych, do których dostęp uzyskuje się za pomocą dostawcy OLE DB.

Ale „heterogeniczny” pojawia się co jakiś czas:

Zobacz łączenie serwerów w MSDN

Możliwość wydawania rozproszonych zapytań, aktualizacji, poleceń i transakcji na heterogenicznych źródłach danych w całym przedsiębiorstwie.

sp_addlinkedserver

Połączony serwer umożliwia dostęp do rozproszonych, heterogenicznych zapytań dotyczących źródeł danych OLE DB.

I przykład MSDN zapytania do Active Directory w „Dołączaniu danych heterogenicznych”

I ponownie MSDN „Heterogeniczna replikacja bazy danych”

gbn
źródło
6

Według mojej najlepszej wiedzy tak.

Problem, który widzę w twoim zapytaniu polega na tym, że nie masz sposobu, aby dowiedzieć się, który wiersz powróci z połączonej tabeli. Czy to tylko fałszywy kod, czy zapytanie jest napisane w ten sposób?

mrdenny
źródło
To fikcyjny kod, jedną kolumnę pobieram z 40 baz danych i zapisuję w tabeli „raportu o stanie” zawierającej tylko te wartości.
Ben Brocka,
1
No dobrze Chciałem tylko upewnić się, że zdajesz sobie sprawę, że wartość wprowadzana do tej kolumny w Srv.db.dbo.table może być różna w zależności od wersji SQL Server, na której uruchamiasz kod. W szczególności od SQL 2005 do SQL 2008 za pomocą opublikowanego kodu otrzymasz inną wartość.
mrdenny 30.09.11
Teraz zainteresowałeś mnie, jaki jest potencjalny problem, po prostu nie wiem, jaki mam pojedynczy wiersz? W tym przypadku tabela ma tylko jeden wiersz, dlatego w podzapytaniu nie ma GDZIE.
Ben Brocka
Jeśli tabela zawiera wiele wierszy, w SQL 2005 otrzymujesz pierwszy wiersz. W SQL 2008 nowa tabela otrzyma drugi wiersz. (Mogę to mieć odwrotnie.)
mrdenny,
Bardzo podobał mi się artykuł ze stwardnienia rozsianego wyjaśniający dokładnie, czym tak naprawdę jest „heterogeniczne zapytanie”, ale wydaje się, że coś takiego nie istnieje, więc zaznaczam to poprawnie.
Ben Brocka
1

Niejednorodny oznacza po prostu inny. Tak więc heterogeniczne zapytanie znajduje się w jednej bazie danych i wysyła zapytanie do INNEJ bazy danych. Ponieważ bazy danych są różne, istnieje możliwość, że ustawienia będą różne, co może spowodować inne wyniki niż zamierzono.

Robert Harrison
źródło