Udostępnij za pośrednictwem


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;

Zobacz także

Odwołanie