Konstruktorfunktioner (XQuery)

Gäller för:SQL Server

Från en specificerad indata skapar konstruktörfunktionerna instanser av någon av de inbyggda eller användardefinierade XSD-atomtyperna.

Syntax

  
TYP($atomicvalue as xdt:anyAtomicType?  
  
) as TYP?  
  

Arguments

$strval
Sträng som kommer att konverteras.

TYP
Vilken inbyggd XSD-typ som helst.

Remarks

Konstruktorer stöds för bas- och härledda atomära XSD-typer. Dock stöds inte undertyperna av xs:duration, som inkluderar xdt:yearMonthDuration och xdt:dayTimeDuration, samt xs:QName, xs:NMTOKEN, och xs:NOTATION . Användardefinierade atomära typer som finns tillgängliga i de tillhörande schemasamlingarna finns också tillgängliga, förutsatt att de direkt eller indirekt härstammar från följande typer.

Stödda bastyper

Detta är de stödda bastyperna:

  • xs:string

  • xs:booleskt värde

  • xs:decimal

  • xs:float

  • xs:dubbel

  • xs:duration

  • xs:dateTime

  • xs:tid

  • xs:datum

  • xs:gYearMonth

  • xs:gYear

  • xs:gMånadsdag

  • xs:gDay

  • xs:gMonth

  • xs:hexBinary

  • xs:base64Binary

  • xs:anyURI

Stödda härledda typer

Dessa är de stödda härledda typerna:

  • xs:normalizedString

  • xs:token

  • xs:språk

  • xs:Namn

  • xs:NCName

  • xs:ID

  • xs:IDREF

  • xs:ENTITY

  • xs:heltal

  • xs:nonPositiveInteger

  • xs:negativeHeltal

  • xs:long

  • xs:int

  • xs:kort

  • xs:byte

  • xs:nonNegativeInteger

  • xs:unsignedLong

  • xs:unsignedInt

  • xs:unsignedShort

  • xs:unsignedByte

  • xs:positiveInteger

SQL Server stöder också konstant vikning för anrop av konstruktionsfunktioner på följande sätt:

  • Om argumentet är en strängbokstav kommer uttrycket att utvärderas under kompileringen. När värdet inte uppfyller typbegränsningarna uppstår ett statiskt fel.

  • Om argumentet är en literal av en annan typ kommer uttrycket att utvärderas under kompileringen. När värdet inte uppfyller typbegränsningarna returneras den tomma sekvensen.

Examples

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

A. Att använda dateTime() XQuery-funktionen för att hämta äldre produktbeskrivningar

I detta exempel tilldelas först ett exempel på XML-dokument en xml-typvariabel . Detta dokument innehåller tre exempelelement <ProductDescription> , där varje element innehåller ett <DateCreated> barnelement.

Variabeln frågas sedan för att endast hämta de produktbeskrivningar som skapades före ett specifikt datum. För jämförelse använder frågan xs:dateTime() -konstruktörfunktionen för att skriva datumen.

declare @x xml  
set @x = '<root>  
<ProductDescription ProductID="1" >  
  <DateCreated DateValue="2000-01-01T00:00:00Z" />  
  <Summary>Some Summary description</Summary>  
</ProductDescription>  
<ProductDescription  ProductID="2" >  
  <DateCreated DateValue="2001-01-01T00:00:00Z" />  
  <Summary>Some Summary description</Summary>  
</ProductDescription>  
<ProductDescription ProductID="3" >  
  <DateCreated DateValue="2002-01-01T00:00:00Z" />  
  <Summary>Some Summary description</Summary>  
</ProductDescription>  
</root>'  
  
select @x.query('  
     for $PD in  /root/ProductDescription  
     where xs:dateTime(data( ($PD/DateCreated/@DateValue)[1] )) < xs:dateTime("2001-01-01T00:00:00Z")  
     return  
        element Product  
       {   
        ( attribute ProductID { data($PD/@ProductID ) },  
        attribute DateCreated { data( ($PD/DateCreated/@DateValue)[1] ) } )  
        }  
 ')  

Observera följande från föregående fråga:

  • FOR ... WHERE-loopstrukturen används för att hämta <ProductDescription-elementet> som uppfyller villkoret som anges i WHERE-klausulen.

  • DateTime()-konstruktörfunktionen används för att konstruera dateTime-typvärden så att de kan jämföras på ett lämpligt sätt.

  • Frågan konstruerar sedan den resulterande XML:en. Eftersom du konstruerar en sekvens av attribut används kommatecken och parenteser i XML-konstruktionen.

Det här är resultatet:

<Product   
   ProductID="1"   
   DateCreated="2000-01-01T00:00:00Z"/>