Dela via


Funktioner för dataåtkomst – sträng (XQuery)

Gäller för:SQL Server

Returnerar värdet för $arg som representeras som en sträng.

Syntax

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

Arguments

$arg

En nod eller ett atomiskt värde.

Anmärkningar

  • Om $arg är den tomma sekvensen returneras strängen med noll längd.

  • Om $arg är en nod returnerar funktionen strängvärdet för noden som hämtas med hjälp av strängvärdesåtkomstorn. Detta definieras i specifikationen W3C XQuery 1.0 och XPath 2.0 Data Model.

  • Om $arg är ett atomiskt värde returnerar funktionen samma sträng som returneras av uttrycket cast som xs:string, $arg, förutom när annat anges.

  • Om typen av $arg är xs:anyURIkonverteras URI:n till en sträng utan att specialtecken tas ifrån.

  • I den här implementeringen fn:string() kan utan argument endast användas i kontexten för ett kontextberoende predikat. Mer specifikt kan den bara användas inom hakparenteser ([ ]).

Examples

Den här artikeln innehåller XQuery-exempel mot XML-instanser som lagras i olika xml-typkolumner i AdventureWorks-databasen.

A. Använda strängfunktionen

Följande fråga hämtar elementets <Features> underordnade elementnod.<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;

Här är det partiella resultatet:

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

Om du anger string() funktionen får du strängvärdet för den angivna noden.

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;

Här är det partiella resultatet.

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

B. Använda strängfunktionen på olika noder

I följande exempel tilldelas en XML-instans till en xml-typvariabel. Frågor anges för att illustrera resultatet av att tillämpa på string() olika noder.

DECLARE @x AS 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>
';

Följande fråga hämtar strängvärdet för dokumentnoden. Det här värdet skapas genom att sammanlänka strängvärdet för alla dess underordnade textnoder.

SELECT @x.query('string(/)');

Här är resultatet:

This is a comment 10
just text
 20

Följande fråga försöker hämta strängvärdet för en bearbetningsinstruktionsnod. Resultatet är en tom sekvens eftersom den inte innehåller någon textnod.

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

Följande fråga hämtar strängvärdet för kommentarsnoden och returnerar textnoden.

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

Här är resultatet:

This is a comment