Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Microsoft SQL Server для профессионалов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

5.2.6 Формат FOR XML EXPLICIT

Запросы SELECT ... FOR XML EXPLICIT в SQL Server, явное определение структуры документа XML, универсальная таблица (universal table)

В некоторых ситуациях возможностей форматов FOR XML RAW и FOR XML AUTO недостаточно. Обычно такие ситуации возникают тогда, когда вам необходимо создать документ XML в заранее определенном формате. В этом случае можно использовать формат FOR XML EXPLICIT, который обладает наибольшей гибкостью при формировании генерируемого документа XML.

При использовании FOR XML EXPLICIT вы специальным образом описываете формат создаваемого документа XML в тексте запроса. Как это делается: вначале формируется так называется универсальная таблица (universal table). Выглядеть она может так:

Tag

Parent

Invoice!1!InvoiceNo

Invoice!1!Date!Element

LineItem!2!ProductID

LineItem!2

1

Null

10248

1996-07-04T00:00:00

NULL

NULL

2

1

10248

NULL

11

Queso

2

1

10248

NULL

42

Singapore

Подобная таблица соответствует такому коду XML:

<Invoice InvoiceNo = '10248'>
     <Date>1996-07-04T00:00:00</Date>
     <LineItem ProductID = '11'>Queso</LineItem>
     <LineItem ProductID = '42'>Singapore</LineItem>
</Invoice>

Как эта таблица создается:

1) первый столбец - Tag, уникально определяет каждый элемент, который будет содержать данные из возвращаемой записи;

2) второй столбец - всегда Parent, числовое значение, которое указывает на прямого родителя для данного элемента. Для корневого элемента значение в этом столбце всегда будет NULL;

3) имена остальных столбцов генерируются в формате

Имя_элемента!Номер_тега!Имя_атрибута!Директива

где

  • Имя_элемента - имя элемента, который будет содержать эти данные;
  • Номер_тега - номер тега по столбцу Tag;
  • Имя_атрибута (необязательный) - имя атрибута или вложенного элемента, который будет содержать эти данные. Если это значение опущено, то данные станут значением элемента;
  • Директива (тоже необязательный) - дополнительные инструкции по форматированию этих данных.

Потом для проверки создается и проверяется запрос TSQL, который должен возвращать universal table:

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element] FROM Orders WHERE OrderID = 10248

Если действительно возвращается указанная вами universal table, то можно дописывать к запросу FOR XML EXPLICIT:

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element] FROM Orders WHERE OrderID = 10248 FOR XML EXPLICIT

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru