Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере показано использование директивы HIDE . Эта директива полезна, если требуется, чтобы запрос возвращал атрибут для упорядочивания строк в универсальной таблице, возвращаемой запросом, но этот атрибут не требуется в итоговом XML-документе.
Этот запрос создает этот XML-код:
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription>
<Summary> element from XML stored in CatalogDescription column
</SummaryDescription>
</Summary>
</ProductModel>
Этот запрос создает нужный XML-код. Запрос определяет две группы столбцов с 1 и 2 значениями тегов в именах столбцов.
Этот запрос использует метод query() (xml Data Type)типа данных XML для запроса столбца CatalogDescription типа XML для получения сводного описания. Запрос также использует метод value() (xml Data Type)типа данных XML для получения значения ProductModelID из столбца CatalogDescription. Это значение не требуется в результирующем XML- коде, но требуется для сортировки результирующего набора строк. Таким образом, имя [Summary!2!ProductModelID!HIDE]
столбца включает директиву HIDE . Если этот столбец не включен в инструкцию SELECT, вам придется отсортировать набор строк по [ProductModel!1!ProdModelID]
и [Summary!2!SummaryDescription]
, которые имеют тип xml, и вы не можете использовать столбец типа xml в ORDER BY. Поэтому добавляется дополнительный [Summary!2!ProductModelID!HIDE]
столбец и затем указывается в предложении ORDER BY.
USE AdventureWorks2012;
GO
SELECT 1 as Tag,
0 as Parent,
ProductModelID as [ProductModel!1!ProdModelID],
Name as [ProductModel!1!Name],
NULL as [Summary!2!ProductModelID!hide],
NULL as [Summary!2!SummaryDescription]
FROM Production.ProductModel
WHERE CatalogDescription is not null
UNION ALL
SELECT 2 as Tag,
1 as Parent,
ProductModelID,
Name,
CatalogDescription.value('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
(/PD:ProductDescription/@ProductModelID)[1]', 'int'),
CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/pd:ProductDescription/pd:Summary')
FROM Production.ProductModel
WHERE CatalogDescription is not null
ORDER BY [ProductModel!1!ProdModelID],[Summary!2!ProductModelID!hide]
FOR XML EXPLICIT
go
Результат:
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription>
<pd:Summary xmlns:pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns="">
<p1:p xmlns:p1="http://www.w3.org/1999/xhtml">Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </p1:p>
</pd:Summary>
</SummaryDescription>
</Summary>
</ProductModel>