Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА:

Вывод данных в XML-формате средствами MS SQL Server 4 года 8 мес. назад #195

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
Иногда, в сложных запросах, требуется вывести данные из разных таблиц, при этом желательно за один шаг и без ущерба для производительности. Например, есть три таблицы: записи, метки (тэги), связь записей и меток. Требуется вывести список записей с метками.
Инструкции
Предполагается, что в базе есть таблицы:
entries - записи
tags - метки
entries_in_tags - связь записей с метками

Иногда, в сложных запросах, требуется вывести данные из разных таблиц, при этом желательно за один шаг и без ущерба для производительности.
Например, есть три таблицы: записи, метки (тэги), связь записей и меток. Требуется вывести список записей с метками.

Конечно, можно сделать один запрос на получение списка записей и далее делать дополнительные запросы к SQL Server непосредственно при выводи записи, но это негативно отразится на производительности.

Как вариант, можно написать отдельную SQL-функцию, которая будет возвращать список меток в определенном формате, например, через запятую, и использовать эту функцию в SQL-запросе получения списка записей. Если с метками такой способ вполне себя оправдает, то с чем-то более крупным, например, если потребуется вывести многострочные текстовые данные, возникнут проблемы, придется, откровенно говоря, извращаться. К тому же использование функций также негативно отразится на производительности.

В MS SQL Server для подобных задач существуют средства для работы с XML. См. примеры ниже.
-- вывод всех меток в формате XML при помощи инструкции FOR XML, 
-- инструкции AUTO указывает на то, 
-- что SQL Server сам определяет структуру XML-данных
SELECT * FROM tags FOR XML AUTO 

-- вывод записей, и меток в колонку tags
SELECT e.*, 
(SELECT tags.tag FROM entries_in_tags 
INNER JOIN tags ON tags.id_tags = entries_in_tags.id_tags 
WHERE id_entries = e.id_entries FOR XML AUTO) AS tags 
FROM entries AS e

-- сами определяем структуру XML-данных
SELECT e.*, 
(SELECT tags.tag AS '@tag' FROM entries_in_tags 
INNER JOIN tags ON tags.id_tags = entries_in_tags.id_tags WHERE id_entries = e.id_entries 
FOR XML PATH ('item'), TYPE, ELEMENTS, ROOT('root')) AS tags 
FROM entries AS e

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Модераторы: Дмитрий

О сайте

Строительство индивидуальных домов из лёгкого самана - опыт, советы, методика строительства и подробные инструкции. А также возможность применения альтернативных источников энергии.


Контакты

08340. ул.Салютная 17. с.Гнедын.
Киевская обл. Украина.

+38 067 492 4124.
+38 095 065 8860.

info@okwood.com.ua
www.okwood.com.ua

Местоположения


8PM2+7R Гнедин, Kyiv Oblast