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?

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”


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?


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.