dane funkcji (XQuery)
Zwraca wartość wpisaną dla każdego element określonego przez $arg.
Składnia
fn:data ($arg as item()*) as xdt:untypedAtomic*
Argumenty
- $arg
Sekwencja elementów, których wpisywane wartości zostaną zwrócone.
Uwagi
Poniższe informacje dotyczą wpisywane wartości:
Wartością wpisaną wartość niepodzielny jest wartością niepodzielny.
Wartością wpisaną węzłem tekstowym jest wartość ciąg węzła tekstu.
Wpisany komentarz wartość wartość ciąg komentarza.
Wpisaną wartość instrukcja przetwarzania zawartości — instrukcja przetwarzania bez instrukcji przetwarzania miejsce docelowe nazwy.
Wartością wpisaną węzeł dokumentu jest jej wartość ciąg.
Poniższe informacje dotyczą węzłów atrybut i elementu:
Jesli węzeł atrybut typu schematu XML jego wartość jest wartością wpisaną odpowiednio.
Jeśli węzeł atrybut bez typu, jego wartość jest równa jego wartość ciąg zwracana jako wystąpienie xdt:untypedAtomic.
Jeżeli węzeł elementu nie został naciśnięty, jego wartość jest równa jego wartość ciąg zwracana jako wystąpienie xdt:untypedAtomic.
Poniższe informacje dotyczą wpisany element węzłów:
Jeśli element ma prosty typ zawartości data() zwraca wartość określonego elementu.
Jeśli węzeł jest złożony, łącznie z xs:anyType, data() zwraca błąd statyczne.
Chociaż użycie data() funkcja jest często opcjonalne, jak pokazano w poniższych przykładach, określając data() funkcji wyraźnie zwiększa czytelność kwerendy.Aby uzyskać więcej informacji, zobacz Podstawy XQuery.
Nie można określić data() na zbudowane XML, jak pokazano poniżej:
declare @x xml;
set @x = '';
select @x.query('data(<SomeNode>value</SomeNode>)');
Przykłady
W tym temacie przedstawiono przykłady XQuery przeciwko wystąpień XML przechowywanych w różnych xml wpisz kolumn w AdventureWorks2008R2 bazy danych.Przegląd tych kolumn, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
A.Za pomocą funkcja XQuery data() wyodrębnić wpisaną wartość węzła
Poniższa kwerenda przedstawia sposób data() funkcja jest używana do pobierania wartości atrybut, element i węzeł tekstowy:
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
Jest to wynikiem:
<Root ProductID="19" Feature="parts and labor"/>
Jak wspomniano, data() funkcja jest opcjonalne, jeśli są konstruowania atrybutów.Jeśli nie określisz data() funkcja niejawnie zakłada.Następująca kwerenda daje te same wyniki, jak poprzedniej kwerendy:
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;
Poniższe przykłady ilustrują wystąpienia, w którym data() funkcja jest wymagana.
W następującej kwerendzie $pd / p1:Specifications / materiału zwraca <Material> element.Ponadto data($pd/p1:Specifications/ Material) zwraca znak dane wpisane jako xdt:untypedAtomic, ponieważ <Material> jest bez typu.Gdy dane wejściowe są bez typu, wynik data() jest wpisana jako 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;
Jest to wynikiem:
<Root>
<Material>Almuminum Alloy</Material>Almuminum Alloy
</Root>
W następującej kwerendzie data($pd/p1:Features/wm:Warranty) zwraca błąd statyczne, ponieważ <Warranty> jest elementem typu złożonego.
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;