Що таке "неоднорідний запит"?


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 баз даних і зберігаю в таблиці "звіт про стан" лише цих значень.
Ben Brocka

1
О, добре. Просто хотілося переконатися, що ви знаєте, що значення, яке потрапляє в цей стовпець на Srv.db.dbo.table, може бути різним залежно від того, на якій версії SQL Server ви використовуєте код. Зокрема, від SQL 2005 до SQL 2008 за допомогою опублікованого коду ви отримаєте інше значення.
mrdenny

Тепер ви зацікавили мене, у чому потенційна проблема, просто я не знаю, до якого ряду я потрапляю? Таблиця містить лише один рядок у цьому випадку, тому в підзапиті немає ДЕРЖАВИ.
Бен Брокка

Якщо в таблиці було кілька рядків, з SQL 2005 ви отримуєте перший рядок. За допомогою SQL 2008 нова таблиця отримає другий рядок. (У мене, можливо, це буде назад).
mrdenny

Мені б подобалося, що стаття від MS пояснює, що саме таке "неоднорідний запит", але, здається, такого не існує, тому я відзначаю це правильно.
Бен Брокка

1

Гетерогенний просто означає інше. Таким чином, неоднорідний запит знаходиться в одній базі даних і запитує РІЗНУ базу даних. Оскільки бази даних різні, це створює можливість налаштувань бути різними, що може спричинити різні результати, ніж було призначено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.