![]() |
![]() ![]() v.5.2011.12.30 |
Хитрый стрелок экранов, Делай и делись снимками экранов! |
|
Microsoft SQL Server - Работа с XML/XSLВсе примеры / Работа с XML/XSLВывод данных в XML-формате средствами MS SQL Server
Автор: Алексей Немиро | добавлено: 04.08.2010, 18:38 | просмотров: 5162 (1+) | комментариев: 0 | рейтинг:
Иногда, в сложных запросах, требуется вывести данные из разных таблиц, при этом желательно за один шаг и без ущерба для производительности. Например, есть три таблицы: записи, метки (тэги), связь записей и меток. Требуется вывести список записей с метками.
![]() ИнструкцииПредполагается, что в базе есть таблицы: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 -- будут вопросы, пишите на форум: http://kbyte.ru/ru/Forums
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Все примеры этого автора (всего: 286)
Добавлять комментарии могут только зарегистрированные пользователи сайта. Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации ![]() Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь. Нет комментариев... |
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
|
|