Udostępnij za pośrednictwem


dane funkcja (XQuery)

Zwraca wartość określonego dla każdego zapasu określonego przez $arg.

fn:data ($arg as item()*) as xdt:untypedAtomic*

Argumenty

  • $arg
    Kolejność elementów, których wartości wpisane zostaną zwrócone.

Remarks

Następujące uwagi dotyczą wpisywanych wartości:

  • Wartość wpisaną wartość niepodzielny jest wartością niepodzielny.

  • Wpisaną wartość węzła tekstu jest wartość ciąg tekstu węzła.

  • Wpisaną wartość komentarz jest wartością ciąg komentarza.

  • Wartość wpisaną instrukcja przetwarzania jest zawartość przetwarzania-instrukcji, bez nazwy miejsce docelowe instrukcji przetwarzania.

  • Wartość wpisaną węzeł dokumentu jest równa wartości ciąg.

Następujące uwagi dotyczą węzłów atrybut i elementu:

  • Jeśli węzeł atrybut jest wpisany z typem schematu XML, wpisaną wartość jest wartością wpisywanych odpowiednio.

  • Jeśli węzeł atrybut bez typu, jego wpisaną wartość jest równa jego wartości ciąg, które są zwracane jako wystąpienie XDT:untypedAtomic.

  • Jeżeli węzeł elementu nie ma został naciśnięty, jego wpisaną wartość jest równa jego wartości ciąg, które są zwracane jako wystąpienie XDT:untypedAtomic.

Następujące uwagi dotyczą do określonego elementu węzłów:

  • Jeśli element ma prosty typ zawartości Data() zwraca wartość określonego elementu.

  • Jeśli węzeł jest typu złożonego, tym xs:anyType, Data() zwraca błąd statyczne.

Chociaż przy użyciu Data() funkcja jest często opcjonalne, jak pokazano w poniższych przykładach, określając Data() funkcja jawnie zwiększa czytelność kwerendy.Aby uzyskać więcej informacji zobaczPodstawowe informacje O XQuery.

Nie można określić Data() na skonstruowany kod 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 przed przechowywane w różnych wystąpień XML XML typu kolumny bazy danych AdventureWorks.Aby uzyskać ogólne informacje o każdej z tych kolumn zobacz xml Data Type Representation in the AdventureWorks Database.

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ł tekstu:

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

To jest wynik:

<Root ProductID="19" Feature="parts and labor"/>

Jak już wspomniano, Data() funkcja jest opcjonalne, jeśli są konstruowania atrybutów.Jeśli nie określisz Data() funkcja, domyślnie przyjmowana jest wartość.Następująca kwerenda powoduje takich samych wyniki, jak w 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 wymagany.

W następującej kwerendzie $ pd / p1:Specifications / materiałów zwraca element <Material> .Ponadto Data($PD/P1:Specifications/ Material) zwraca dane znakowe wpisana 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

To jest wynik:

<Root>
  <Material>Almuminum Alloy</Material>Almuminum Alloy
</Root>

W następującej kwerendzie Data($PD/P1:Features/WM:Warranty) zwraca błąd statycznych, 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