Sdílet prostřednictvím


Funkce datového příslušenství – řetězec (XQuery)

platí pro:SQL Server

Vrátí hodnotu $arg reprezentované jako řetězec.

Syntax

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

Argumenty

$arg
Je uzel nebo atomická hodnota.

Poznámky

  • Pokud $arg je prázdná sekvence, vrátí se řetězec nulové délky.

  • Pokud $arg je uzel, vrátí funkce řetězcovou hodnotu uzlu, který je získán pomocí přístupového objektu řetězcové hodnoty. To je definováno ve specifikaci datového modelu W3C XQuery 1.0 a XPath 2.0.

  • Pokud je $arg atomická hodnota, vrátí funkce stejný řetězec, který vrátí výraz přetypovaný jako xs:string, $arg, s výjimkou případů, kdy je uvedeno jinak.

  • Pokud je typ $argxs:anyURI, identifikátor URI se převede na řetězec bez zapouzdření speciálních znaků.

  • V této implementaci lze fn:string() bez argumentu použít pouze v kontextu predikátu závislého na kontextu. Konkrétně lze použít pouze vnitřní závorky ([ ]).

Příklady

Toto téma obsahuje příklady XQuery pro instance XML, které jsou uloženy v různých xml sloupce typu v databázi AdventureWorks.

A. Použití řetězcové funkce

Následující dotaz načte uzel podřízeného prvku <Features> elementu <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  

Toto je částečný výsledek:

<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>  

Pokud zadáte funkci string(), obdržíte řetězcovou hodnotu zadaného uzlu.

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  

Jedná se o částečný výsledek.

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

B. Použití řetězcové funkce na různých uzlech

V následujícím příkladu je instance XML přiřazena proměnné typu XML. Dotazy jsou určené pro ilustraci výsledku použití string() na různé uzly.

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>  
'  

Následující dotaz načte řetězcovou hodnotu uzlu dokumentu. Tato hodnota je tvořena zřetězením řetězcové hodnoty všech jeho sestupných textových uzlů.

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

Toto je výsledek:

This is a comment 10  
just text  
 20  

Následující dotaz se pokusí načíst řetězcovou hodnotu uzlu instrukce pro zpracování. Výsledkem je prázdná sekvence, protože neobsahuje textový uzel.

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

Následující dotaz načte řetězcovou hodnotu uzlu komentáře a vrátí textový uzel.

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

Toto je výsledek:

This is a comment   

Viz také

funkce XQuery proti datového typu XML