Delen via


Data Accessor Functions - tekenreeks (XQuery)

van toepassing op:SQL Server-

Retourneert de waarde van $arg weergegeven als een tekenreeks.

Syntaxis

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

Argumenten

$arg

Een knooppunt of een atomische waarde.

Opmerkingen

  • Als $arg de lege reeks is, wordt de tekenreeks met lengte nul geretourneerd.

  • Als $arg een knooppunt is, retourneert de functie de tekenreekswaarde van het knooppunt dat wordt verkregen met behulp van de accessor voor tekenreekswaarden. Dit is gedefinieerd in de specificatie W3C XQuery 1.0 en XPath 2.0-gegevensmodel.

  • Als $arg een atomische waarde is, retourneert de functie dezelfde tekenreeks die wordt geretourneerd door de expressiecast als xs:string, $arg, behalve wanneer anders wordt vermeld.

  • Als het type $arg is xs:anyURI, wordt de URI geconverteerd naar een tekenreeks zonder speciale tekens te ontsnappen.

  • In deze implementatie fn:string() kan zonder argument alleen worden gebruikt in de context van een contextafhankelijk predicaat. Het kan met name alleen tussen vierkante haken ([ ]) worden gebruikt.

Voorbeelden

Dit artikel bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml-typekolommen in de AdventureWorks-database .

Een. De tekenreeksfunctie gebruiken

Met de volgende query wordt het <Features> onderliggende elementknooppunt van het <ProductDescription>-element opgehaald.

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;

Dit is het gedeeltelijke resultaat:

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

Als u de string() functie opgeeft, ontvangt u de tekenreekswaarde van het opgegeven knooppunt.

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;

Dit is het gedeeltelijke resultaat.

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

B. De tekenreeksfunctie op verschillende knooppunten gebruiken

In het volgende voorbeeld wordt een XML-exemplaar toegewezen aan een xml-typevariabele. Query's worden opgegeven om het resultaat te illustreren van het toepassen op string() verschillende knooppunten.

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

Met de volgende query wordt de tekenreekswaarde van het documentknooppunt opgehaald. Deze waarde wordt gevormd door de tekenreekswaarde van alle afliggende tekstknooppunten samen te voegen.

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

Dit is het resultaat:

This is a comment 10
just text
 20

De volgende query probeert de tekenreekswaarde van een verwerkingsinstructieknooppunt op te halen. Het resultaat is een lege reeks, omdat het geen tekstknooppunt bevat.

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

De volgende query haalt de tekenreekswaarde van het opmerkingknooppunt op en retourneert het tekstknooppunt.

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

Dit is het resultaat:

This is a comment