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