Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения:SQL Server
Возвращает типизированное значение для каждого элемента, указанного $arg.
Синтаксис
fn:data ($arg as item()*) as xdt:untypedAtomic*
Аргументы
$arg
Последовательность элементов, типизированные значения которых возвращаются.
Замечания
Следующие рекомендации относятся к типизированным значениям:
Типизированное значение атомного значения является атомным значением.
Типизированное значение узла текста является строковым значением узла текста.
Типизированное значение комментария является строковым значением комментария.
Типизированное значение инструкции по обработке является содержимым инструкции обработки, без целевого имени инструкции обработки.
Типизированное значение узла документов является его строковым значением.
Следующие рекомендации относятся к узлам атрибутов и элементов:
Если узел атрибута типизирован посредством XML-схемы, его типизированное значение соответственно является типизированным значением.
Если узел атрибута нетипичен, его типизированное значение равно строкового значения, возвращаемого в качестве экземпляра
xdt:untypedAtomic.Если узел элемента не был введен, его типизированное значение равно строкового значения, возвращаемого в качестве экземпляра
xdt:untypedAtomic.
Следующие рекомендации относятся к типизированным узлам элементов:
Если элемент имеет простой тип контента,
data()возвращает типизированное значение элемента.Если узел имеет сложный тип, включая xs:anyType,
data()возвращает статическую ошибку.
Хотя использование data() функции часто является необязательным, как показано в следующих примерах, указание data() функции явно увеличивает удобочитаемость запросов. Дополнительные сведения см. в разделе "Основы XQuery".
Вы не можете указать data() созданный XML, как показано в следующем примере:
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Примеры
В этой статье приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типов XML в базе данных AdventureWorks.
А. Использование функции XQuery для извлечения типизированного значения узла с помощью функции XQuery
В следующем запросе показано, как data() функция используется для получения значений атрибута, элемента и текстового узла:
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query(N'
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ data( ($pd//@ProductModelID)[1] ) }"
Feature = "{ data( ($pd/p1:Features/wm:Warranty/wm:Description)[1] ) }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Ниже приведен результат:
<Root ProductID="19" Feature="parts and labor"/>
Как упоминалось, функция является необязательной data() при создании атрибутов. Если функция не указана data() , она неявно предполагается. Этот запрос формирует те же результаты, что и предыдущий запрос:
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ ($pd/@ProductModelID)[1] }"
Feature = "{ ($pd/p1:Features/wm:Warranty/wm:Description)[1] }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
В следующих примерах показаны экземпляры, в которых data() требуется функция.
В следующем запросе $pd/p1:Specifications/Material возвращается <Material> элемент. Кроме того, data($pd/p1:Specifications/ Material) возвращает символьные данные, типизированные как xdt:untypedAtomic, так как <Material> нетипичен. Если входные данные нетипичены, результат data() введите как xdt:untypedAtomic.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $pd in //p1:ProductDescription
return
<Root>
{ $pd/p1:Specifications/Material }
{ data($pd/p1:Specifications/Material) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Ниже приведен результат:
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
В следующем запросе возвращается статическое сообщение об ошибке, data($pd/p1:Features/wm:Warranty) так как <Warranty> это сложный элемент типа.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Root>
{ /p1:ProductDescription/p1:Features/wm:Warranty }
{ data(/p1:ProductDescription/p1:Features/wm:Warranty) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 23;