Программирование >>  Программирование баз данных 

1 ... 193 194 195 [ 196 ] 197 198 199 ... 346


<OrderDate>2002-03-01T00:00:00</OrderDate> </sohxsoh SalesOrderID= 46389 >

<OrderDate>2002-06-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 47454 >

<OrderDate>2002-09-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 48395 >

<OrderDate>2002-12-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 49495 >

<OrderDate>2003-03-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 50756 >

<OrderDate>2003-06-01T00:00:00</OrderDate> </soh>

</c>

<c ContactID= 2 LastName= Abel FirstName= Catherine > <soh SalesOrderID= 53459 >

<OrderDate>2003-09-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 58907 >

<OrderDate>2003-12-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 65157 >

<OrderDate>2004-03-01T00:00:00</OrderDate> </soh>

<soh SalesOrderID= 71782 >

<OrderDate>2004-06-01T00:00:00</OrderDate> </soh>

</c>

Директива xml

Директива xml почти аналогична директиве element. Дело в том, что директива xml также указывает, что данные столбца, к которому она относится, должны быть сформированы в виде элемента, а не атрибута. Различия между директивами xml и element обнаруживаются, только если в представляемых данных имеются специальные символы, требующие кодирования. Например, в коде XML знак равенства (=) является зарезервированным. Если же необходимо представить сам символ =, то следует его закодировать (в закодированном виде символ = принимает вид &ед;). При использовании директивы element содержимое элемента кодируется автоматически. С другой стороны, применение директивы xml предусматривает передачу содержимого непосредственно в результирующий код XML без кодировки. Если применяется директива xml, ни одна другая конструкция на том же уровне (на уровне с тем же номером) не может включать какую-либо директиву, кроме hide.

Директива hide

Директива hide - еще одна простая директива, с помощью которой осуществляется именно то, что следует из ее названия, - она скрывает результаты, представленные в конкретном столбце.

Необходимость в таком сокрытии данных возникает в связи со следующей причиной: иногда приходится включать в запрос столбцы в целях выполнения с данными этих столбцов каких-то других операций, отличных от операции вывода. Например, если в качестве примера взять обычный запрос, то, как известно, в запросе иногда приходится выполнять сортировку с помощью конструкции ORDER BY с учетом данных таких столбцов, которые не пристствуют в списке выборки. Но при выполнении



запросов с операциями UNION возможность указывать только нужные столбцы отсутствует, поскольку в операции объединения могут участвовать лишь те столбцы, которые заданы в списке выборки.

Рассмотрим небольшой пример, в котором отслеживаются некоторые результаты сбыта товаров, названия которых даны в столбце Product. Предположим, что требуется получить список всех товаров, определить идентификаторы SalesOrderlD тех заказов, согласно которым была выполнена их поставка, а также узнать, в какие даты осуш;ествл5и1ИСь эти поставки. Требуется получить только идентификаторы товаров ProductID, но значения ProductID должны быть отсортированы так, чтобы данные обо всех конкретных товарах находились рядом с данными об аналогичных товарах. Это означает, что должна быть выполнена сортировка по идентификаторам категории ProductSubcategorylD, но сами значения ProductSubcategorylD не должны быть включены в окончательные результаты.

Вначале сформируем запрос без директивы hide; это позволяет проверить, как осуш;ествляется намеченная сортировка:

SELECT 1 as Tag,

NULL as Parent,

p.ProductID as [Product!1!ProductID],

p.ProductSubcategorylD as [Product 111ProductSubcategorylD],

NULL as [Order!2!OrderlD],

NULL as [Order!2OrderDate]

FROM Production.Product p JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID JOIN Sales.SalesOrderHeader AS soh

ON sod.SalesOrderlD = soh.SalesOrderlD WHERE soh.OrderDate BETWEEN 2003-03-27 AND 2003-03-27

UNION ALL

SELECT 2, 1,

p.ProductID, p.ProductSubcategorylD, soh.SalesOrderlD, soh.OrderDate FROM Production.Product AS p JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID JOIN Sales.SalesOrderHeader AS soh

ON sod.SalesOrderlD = soh.SalesOrderlD WHERE soh.OrderDate BETWEEN 2003-03-27 AND 2003-03-27

ORDER BY [Product!1!ProductSubcategorylD] , [Product!1!ProductID], [Order!2!OrderlD] FOR XML EXPLICIT

Обязательно ознакомьтесь с тем, как осущестеляется обработка значения OrderDate в данном запросе. Безуствно, требовалось осуществить выборку этой информации из таблицы SalesOrderHeader, ню данную информацию можно бьию легко объединить со значениями идентификаторов SalesOrderlD, полученных из табгицы SalesOrderDetail (хотя бы потому, что применяется опция EXPLICIT). Как оказалось, можно было бы также получить значения идентификаторов SalesOrderlD из таблицы SalesOrderHeader, но иногда приходится смешивать данные из нескольких таблиц в одном элементе, и настоящий запрос может служить еще одной демонстрацией того, как решить именно эту задачу.



Приведенные ниже результаты показывают, что была выполнена именно такая

сортировка, на осуществление которой мы рассчитывали.

<Product ProductID= 779 ProductSubcategoryID= 1 >

<Order OrderID= 49775 OrderDate= 2003-03-27T00:00:00 /> </Product>

<Product ProductID= 782 ProductSubcategoryID= 1 >

<Order OrderID= 49774 OrderDate= 2003-03-27T00:00:00 /> </Product>

<Product ProductID= 764 ProductSubcategoryID= 2 >

<Order OrderID= 49776 OrderDate= 2003-03-27T00:00:00 /> </Product><

Product ProductID= 766 ProductSubcategoryID= 2 >

<Order OrderID= 49777 OrderDate= 2003-03-27T00:00:00 /> </Product>

Теперь введем директиву hide, чтобы исключить информацию о категории:

SELECT 1 as Tag,

NULL as Parent,

p.ProductID as [Product!1!ProductID],

p.ProductSubcategoryID as [Product!1!ProductSubcategorylD! liide],

NULL as [Order!2lOrderlD],

NULL as [Order!2OrderDate]

FROM Production.Product p JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID JOIN Sales.SalesOrderHeader AS soh

ON sod.SalesOrderlD = soh.SalesOrderlD WHERE soh.OrderDate BETWEEN 2003-03-27 AND 2003-03-27

UNION ALL

SELECT 2, 1,

p.ProductID, p.ProductSubcategorylD, soh.SalesOrderlD, soh.OrderDate FROM Production.Product AS p JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID JOIN Sales.SalesOrderHeader AS soh

ON sod.SalesOrderlD = soh.SalesOrderlD WHERE soh.OrderDate BETWEEN 2003-03-27 AND 2003-03-27 ORDER BY [Product!1!ProductSubcategorylD!hide], [Product!1!ProductID],

[0rder!2!0rderID] FOR XML EXPLICIT

Очевидно, что формируются такие же результаты, но на этот раз информация столбца Category скрыта:

<Product ProductID= 779 >

<Order OrderID= 49775 OrderDate= 2003-03-27T00:00:00 /> </Product>

<Product ProductID= 782 >

<Order OrderID= 49774 OrderDate= 2003-03-27T00:00:00 /> </Product>

<Product ProductID= 764 >

<Order OrderID= 49776 OrderDate= 2003-03-27T00:00:00 /> </Product>

<Product ProductID= 766 >

<Order OrderID= 49777 OrderDate= 2003-03-27T00:00:00 /> </Product>



1 ... 193 194 195 [ 196 ] 197 198 199 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика