Что такое «гетерогенный запрос»?


14

Я получил следующее сообщение об ошибке, касающееся SQL-запроса, который я выполняю в программе. SQL Server 2005 T-SQL.

Гетерогенные запросы требуют ANSI_NULLSи ANSI_WARNINGSопции , которые нужно установить для подключения. Это обеспечивает согласованную семантику запроса. Включите эти параметры, а затем повторите запрос. (серьезность 16)

Исправить это легко, установить ANSI_NULLSи ANSI_WARNINGS ON, но я хотел знать, что такое гетерогенный запрос. Поиск в Google выводит десятки результатов, подсказывающих мне установить, ANSI_NULLSи ANSI_WARNINGSничего не объясняющих, что означает этот термин. Запрос:

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

Я думаю, что это связано с подключением к нескольким механизмам баз данных в одном запросе, поскольку я никогда не получал эту ошибку в противном случае.
Означает ли «Гетерогенный» запрос двух разных механизмов баз данных в этом контексте?

Ответы:


8

Означает ли «Гетерогенный» запрос двух разных механизмов баз данных в этом контексте?

В основном да. «Разнородный» запрос выполняется на «разнородном связанном сервере». Все запросы к этому связанному серверу будут неоднородными.

И «гетерогенный» является подмножеством распределенных запросов

  • Распределенные данные хранятся в нескольких экземплярах SQL Server.
  • Гетерогенные данные, хранящиеся в различных реляционных и нереляционных источниках данных, доступ к которым осуществляется с помощью поставщика OLE DB.

Но «разнородный» всплывает время от времени:

Смотрите ссылки на серверы в MSDN

Возможность выдачи распределенных запросов, обновлений, команд и транзакций для разнородных источников данных по всему предприятию.

sp_addlinkedserver

Связанный сервер обеспечивает доступ к распределенным гетерогенным запросам к источникам данных OLE DB.

И пример MSDN запроса Active Directory в разделе «Объединение разнородных данных»

И снова MSDN "Гетерогенная репликация базы данных"


6

Насколько мне известно, да.

Проблема, которую я вижу с вашим запросом, состоит в том, что у вас нет возможности узнать, какая строка вернется из вашей связанной таблицы. Это просто фиктивный код или ваш запрос написан таким образом?


Это фиктивный код, есть один столбец, который я выбираю из 40 баз данных и сохраняю в таблицу «отчет о состоянии» только этих значений.
— Бен Брока

1
О хорошо Просто хотел убедиться, что вы знаете, что значение, которое помещается в этот столбец на Srv.db.dbo.table, может отличаться в зависимости от того, на какой версии SQL Server вы запускаете код. В частности, от SQL 2005 до SQL 2008, используя опубликованный код, вы получите другое значение.
— Мрденни

Теперь вы заинтересовали меня, какова потенциальная проблема, просто я не знаю, какой ряд я получаю? В этом случае таблица содержит только одну строку, поэтому в подзапросе нет WHERE.
— Бен Брока

Если в таблице было несколько строк, в SQL 2005 вы получите первую строку. С SQL 2008 новая таблица получит вторую строку. (Я мог бы иметь это задом наперед.)
— mrdenny

Мне бы понравилась статья от MS, объясняющая, что такое «гетерогенный запрос» на самом деле, но, похоже, такого не существует, поэтому я отмечаю это правильно.
— Бен Брока

1

Гетерогенный просто означает другое. Таким образом, гетерогенный запрос находится в одной базе данных и запрашивает РАЗНУЮ базу данных. Поскольку базы данных разные, возникает возможность того, что настройки будут другими, что может привести к результатам, отличным от запланированных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.