Помощь в написании студенческих работ
Антистрессовый сервис

Получение данных из реляционных таблиц в виде 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].

Показать весь текст
Заполнить форму текущей работой