Udostępnij za pośrednictwem


Funkcje dostępu do danych — ciąg (XQuery)

Dotyczy:programu SQL Server

Zwraca wartość $arg reprezentowaną jako ciąg.

Składnia

  
fn:string() as xs:string  
fn:string($arg as item()?) as xs:string  

Argumenty

$arg
To węzeł lub wartość niepodzielna.

Uwagi

  • Jeśli $arg jest pustą sekwencją, zwracany jest ciąg o zerowej długości.

  • Jeśli $arg jest węzłem, funkcja zwraca wartość ciągu węzła uzyskanego przy użyciu metody dostępu ciąg-wartość. Jest to zdefiniowane w specyfikacji modelu danych W3C XQuery 1.0 i XPath 2.0.

  • Jeśli $arg jest wartością niepodzieną, funkcja zwraca ten sam ciąg, który jest zwracany przez wyrażenie rzutowane jako xs:string, $arg, z wyjątkiem sytuacji, gdy jest to zaznaczone inaczej.

  • Jeśli typ $arg jest xs:anyURI, identyfikator URI jest konwertowany na ciąg bez ucieczki znaków specjalnych.

  • W tej implementacji fn:string() bez argumentu można używać tylko w kontekście predykatu zależnego od kontekstu. W szczególności można go używać tylko wewnątrz nawiasów kwadratowych ([ ]).

Przykłady

Ten temat zawiera przykłady zapytań XQuery dla wystąpień XML przechowywanych w różnych kolumnach xml typów w bazie danych AdventureWorks.

A. Korzystanie z funkcji string

Poniższe zapytanie pobiera węzeł elementu podrzędnego <Features><ProductDescription>.

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
 /PD:ProductDescription/PD:Features  
')  
FROM Production.ProductModel  
WHERE ProductModelID=19  

Jest to wynik częściowy:

<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">  
   These are the product highlights.   
   <p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
    <p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>  
    <p1:Description>parts and labor</p1:Description>  
   </p1:Warranty>  
       ...  
</PD:Features>  

Jeśli określisz funkcję string(), otrzymasz wartość ciągu określonego węzła.

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
 string(/PD:ProductDescription[1]/PD:Features[1])  
')  
FROM Production.ProductModel  
WHERE ProductModelID=19  

Jest to wynik częściowy.

These are the product highlights.   
3 yearsparts and labor...    

B. Korzystanie z funkcji string w różnych węzłach

W poniższym przykładzie wystąpienie XML jest przypisywane do zmiennej typu XML. Zapytania są określone w celu zilustrowania wyniku zastosowania string() do różnych węzłów.

declare @x xml  
set @x = '<?xml version="1.0" encoding="UTF-8" ?>  
<!--  This is a comment -->  
<root>  
  <a>10</a>  
just text  
  <b attr="x">20</b>  
</root>  
'  

Poniższe zapytanie pobiera wartość ciągu węzła dokumentu. Ta wartość jest tworzona przez łączenie wartości ciągu wszystkich jego węzłów tekstowych malejących.

select @x.query('string(/)')  

Jest to wynik:

This is a comment 10  
just text  
 20  

Poniższe zapytanie próbuje pobrać wartość ciągu węzła instrukcji przetwarzania. Wynik jest pustą sekwencją, ponieważ nie zawiera węzła tekstowego.

select @x.query('string(/processing-instruction()[1])')  

Poniższe zapytanie pobiera wartość ciągu węzła komentarza i zwraca węzeł tekstowy.

select @x.query('string(/comment()[1])')  

Jest to wynik:

This is a comment   

Zobacz też

funkcji XQuery względem typu danych XML