- •Работа с xml в ms sql Server 2005, 2008
- •Использование типа данных xml Тип данных xml
- •Методы Query, Value, Exist, Modify и Nodes
- •Извлечение xml-данных с помощью предложения for xml Режим запроса raw
- •Результат:
- •Режим запроса explicit
- •Режим запроса path
- •Извлечение вложенных xml–данных
- •Индивидуальные задание:
Извлечение xml-данных с помощью предложения for xml Режим запроса raw
Предложение FOR XML используется в инструкции Transact-SQL SELECT для извлечения данных в виде XML вместо строк и столбцов. Для управления форматом XML доступны следующие режимы: RAW, AUTO, EXPLICIT или PATH. Также для управления выводом данных доступны различные параметры.
Запросы в режиме RAW используются для извлечения набора строк в виде XML. Приложения могут обрабатывать XML-данные в встроенном формате или применять к ним таблицу стилей XSLT для преобразования этих XML-данных в требуемый формат делового документа или представление интерфейса пользователя.
12. Пример извлечения данных из реляционной таблицы и преобразования к XML:
use AdventureWorksLT
select b.Name as Name_Categorya, a.Name as Name_product FROM
SalesLT.Product a inner join SalesLT.ProductCategory b ON
a.ProductCategoryID=b.ProductCategoryID
FOR XML RAW
Результат:
<row Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 38"/><row Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 42"/><row Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 44"/><row Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 48"/><row Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Black, 38"/>
…
13. Пример извлечения данных из реляционной таблицы и преобразования к XML, сравнить с предыдущим результатом:
use AdventureWorksLT
select b.Name as Name_Categorya, a.Name as Name_product FROM
SalesLT.Product a inner join SalesLT.ProductCategory b ON
a.ProductCategoryID=b.ProductCategoryID
FOR XML RAW('product')
Результат:
<product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 38"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 42"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 44"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 48"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Black, 38"/>
…
14. Пример извлечения данных из реляционной таблицы и преобразования к XML, сравнить с предыдущим результатом:
use AdventureWorksLT
select b.Name as Name_Categorya, a.Name as Name_product FROM
SalesLT.Product a inner join SalesLT.ProductCategory b ON
a.ProductCategoryID=b.ProductCategoryID
FOR XML RAW('product'),ROOT('Products')
Результат:
<Products>
<product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 38"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 42"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 44"/><product Name_Categorya="Mountain Bikes" Name_product="Mountain-100 Silver, 48"/>
…
</Products>
Режим запроса AUTO
В результате выполнения запросов в режиме AUTO создается XML-представление объектов данных:
Каждая строка, возвращаемая данным запросом, представлена элементом XML, имя которого соответствует имени таблицы, из которой он был извлечен (или псевдониму, используемому в запросе).
Каждая инструкция JOIN в запросе приводит к возврату вложенного элемента XML, что уменьшает дублирование данных в результирующем фрагменте XML. Порядок инструкций JOIN влияет на порядок расположения элементов.
Чтобы обеспечить корректность связи дочерних элементов с соответствующими родительскими элементами, данные должны быть возвращены в верном порядке иерархии с использованием предложения ORDER BY.
Каждый столбец в результирующем наборе представлен атрибутом, если не указан параметр ELEMENTS. В последнем случае столбцы представлены в виде дочерних элементов.
15. Пример извлечения данных из реляционной таблицы и преобразования к XML:
use AdventureWorksLT
select b.Name as Name_Categorya, a.Name as Name_product FROM
SalesLT.Product a inner join SalesLT.ProductCategory b ON
a.ProductCategoryID=b.ProductCategoryID
FOR XML AUTO
Результат:
<b Name_Categorya="Mountain Bikes">
<a Name_product="Mountain-100 Silver, 38" />
<a Name_product="Mountain-100 Silver, 42" />
<a Name_product="Mountain-100 Silver, 44" />
<a Name_product="Mountain-100 Silver, 48" />
<a Name_product="Mountain-200 Black, 38" />
<a Name_product="Mountain-200 Black, 42" />
<a Name_product="Mountain-200 Black, 46" />
</b>
<b Name_Categorya="Road Bikes">
<a Name_product="Road-350-W Yellow, 40" />
<a Name_product="Road-350-W Yellow, 42" />
<a Name_product="Road-350-W Yellow, 44" />
<a Name_product="Road-350-W Yellow, 48" />
<a Name_product="Road-750 Black, 58" />
</b>