Получение данных из реляционных таблиц в виде XML
Кроме того, если обратить внимание на предыдущий пример, можно заметить, что у соответствующего второй книге элемента нет атрибута Publisher. В реляционной таблице в этом поле было значение NULL, а при формировании XML, но умолчанию атрибут или элемент (если стоит ELEMENTS) просто пропускается. Если надо при обработке значения NULL сохранять элемент, в инструкцию FOR XML следует добавить ключевые… Читать ещё >
Получение данных из реляционных таблиц в виде XML (реферат, курсовая, диплом, контрольная)
В некоторых случаях может понадобиться получить результаты запроса к реляционным таблицам БД в формате XML, например для передачи их другому приложению с целью дальнейшей обработки. В SQL Server это можно выполнить с помощью инструкции FOR XML, добавляемой в конец оператора SELECT. В качестве примера ниже приведен текст подобного запроса:
SELECT DISTINCT [Author], [Title] FROM dbo.Bookl.
FOR XML AUTO.
После выполнения запроса был получен следующий фрагмент документа XML, в котором каждой записи результирующего набора соответствует один элемент, а значения столбцов формируют атрибуты элемента:
/>
В Transact-SQL у инструкции FOR XML есть несколько режимов работы. RAW [ (' ElementName') ] - преобразует каждую строку в результирующем наборе в элемент XML. Идентификатор элемента может быть явно указан в скобках или может использоваться идентификатор по умолчанию «row». С помощью ключевого слова ROOT, добавленного через запятую после RAW, можно задать имя корневого элемента. Например:
SELECT * FROM dbo.Bookl.
FOR XML RAW ('Book'), ROOT ('Books').
Результат запроса:
Если требуется представить поля записей не как атрибуты элементов, а как вложенные элементы, это можно сделать, указав через запятую ключевое слово ELEMENTS.
Кроме того, если обратить внимание на предыдущий пример, можно заметить, что у соответствующего второй книге элемента нет атрибута Publisher. В реляционной таблице в этом поле было значение NULL, а при формировании XML, но умолчанию атрибут или элемент (если стоит ELEMENTS) просто пропускается. Если надо при обработке значения NULL сохранять элемент, в инструкцию FOR XML следует добавить ключевые слова ELEMENTS XSINIL. Например, запрос SELECT DISTINCT [Title], [Publisher].
FROM dbo.Bookl.
FOR XML RAW ('Book'), ROOT ('Books'),.
ELEMENTS XSINIL.
выведет результат.
Microsoft SQL Server 2008. Основы T-SQL.
BXB-neTep6ypr.
SQL Server 2008. Реализация и обслуживание.
Здесь в открывающем теге корневого элемента стоит ссылка на пространство имен XML, названное xsi. В этом пространстве имен определен атрибут nil, используемый в элементе, указывающем, что название издательства не определено.
Режим AUTO удобен, если на основе результатов запроса нужно сформировать простые иерархические структуры. По умолчанию строки выходного множества запроса преобразуются в элемент, значения столбцов — в атрибуты элемента. Название элементов будет совпадать с названием исходных таблиц или представлений, но если в секции FROM для них заданы псевдонимы, в названии элемента они также будут использоваться. Так же как и в предыдущем случае, можно использовать инструкции ROOT и ELEMENTS.
В приведенном ниже запросе делается выборка данных из двух таблиц, связанных внешним ключом. В секции FROM для таблиц задаются псевдонимы, которые в дальнейшем используются при именовании столбцов результата. В таблице dbo. Bookl описаны книжные издания, в таблице dbo. Libl — имеющиеся в библиотеке экземпляры изданий и их текущий статус:
Select [Author], [Title], [Libld], [Status].
FROM dbo. Bookl] as [Edition] INNER JOIN.
dbo. Libl] as [Book].
ON [Edition]. Id] = [Book]. Id].
FOR XML AUTO, ROOT ('Books').
Результат запроса представлен ниже. Обратите внимание, что в результате обработки инструкцией FOR XML AUTO данные из подчиненной таблицы dbo. Libl, ссылающейся на таблицу dbo. Bookl, организованы в виде вложенных элементов:
При использовании FOR XML в режиме EXPLICIT структура дерева XML определяется явно. Для этого применяется достаточно сложный синтаксис, который здесь приводиться не будет в связи с тем, что режим PATH представляет более простую альтернативу. Ознакомиться с синтаксисом EXPLICIT можно в документации по SQL Server [27].
В режиме FOR XML PATH предоставляется возможность смешивания элементов и атрибутов в результирующем XML документе, а также введения дополнительных уровней вложенности для представления сложных свойств. В документации по SQL Server отмечается, что использование FOR XML PATH является лучшим выбором для большинства случаев [27].
По умолчанию режим PATH формирует упаковщик элемента для каждой строки в результирующем наборе. Также можно указать имя элемента. Если имя указывается, оно используется в качестве имени упаковщика элемента. При предоставлении пустой строки (FOR XML PATH ('')) упаковщик элемента не формируется. Поясним это на примере запроса, ранее использовавшегося для иллюстрации работы режима RAW:
SELECT DISTINCT [Title], [Publisher].
FROM dbo.Bookl.
FOR XML PATH.
Результат выполнения запроса представлен ниже. Здесь необходимо напомнить, что в нашей БД для второй книги издательство не указывалось, из-за чего соответствующего элемента нет в результирующем наборе:
Microsoft SQL Server 2008. Основы T-SQL.
BXB-neTep6ypr.
SQL Server 2008. Реализация и обслуживание.
В режиме PATH также можно использовать инструкции ROOT и ELEMENTS. Если отдельные значения нужно оформить как атрибуты элемента, это можно сделать, указав в секции SELECT название атрибута в двойных кавычках:
SELECT DISTINCT [Publisher] as «@Publ», [Title].
FROM dbo.Bookl.
FOR XML PATH ('Edition'), ROOT ('Books').
Результат запроса будет следующим:
SQL Server 2008. Реализация и обслуживание.
Microsoft SQL Server 2008. Основы T-SQL.
В результат запроса можно также добавить комментарии (as «comment ()»), константы XML (as «node ()»), пространства имен и т. д. В следующем запросе информация об авторе книги оформляется как комментарий, а в формируемый документ добавляется новый пустой элемент :
SELECT [Publisher] as «@Publ» ,.
[Author] as «comment ()» ,.
CAST ('' AS XML) as «nodeO» ,.
[Title].
FROM dbo.Bookl.
FOR XML PATH ('Edition'), ROOT ('Books').
Результат выполнения запроса приведен ниже:
Microsoft SQL Server 2008. Основы T-SQL.
SQL Server 2008. Реализация и обслуживание.
Инструкция FOR XML PATH позволяет реализовать вложенные запросы. Ниже представлен пример, в котором используется вложенный запрос, возвращающий фрагмент документа XML:
SELECT [Publisher] as «0Publ» ,.
[Title] as «@Title» ,.
(SELECT [Libld] as «SLibld» ,.
[Status] as «SStatus» FROM dbo.Libl.
WHERE dbo.Libl.id=dbo.Bookl. Id.
FOR XML PATH ('Book'), TYPE).
FROM dbo. Bookl WHERE Id=101.
FOR XML PATH ('Edition'), ROOT ('Books').
Инструкция TYPE, обязательная для корректного форматирования данных во вложенном запросе, указывает на то, что запрос возвращает результаты в виде типа xml. Результат выполнения данного запроса:
Возможности режима FOR XML PATH не ограничиваются перечисленными выше, и для более подробной информации рекомендуется обратиться к документации SQL Server [27].