Konstruktorfunktionen (XQuery)

Die Konstruktorfunktionen erstellen Instanzen beliebiger integrierter oder benutzerdefinierter atomarer XSD-Typen aus den angegebenen Eingaben.

Syntax


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

Argumente

  • $strval
    Zu konvertierende Zeichenfolge.

  • TYP
    Ein beliebiger integrierter XSD-Typ.

Hinweise

Konstruktoren werden von atomaren XSD-Basistypen sowie abgeleiteten Typen unterstützt. Die Untertypen von xs:duration einschließlich xdt:yearMonthDuration und xdt:dayTimeDuration, sowie xs:QName, xs:NMTOKEN und xs:NOTATION werden jedoch nicht unterstützt. Die benutzerdefinierten atomaren Typen, die in den damit verbundenen Schemaauflistungen verfügbar sind, stehen auch hier zur Verfügung, unter der Voraussetzung, dass sie direkt oder indirekt aus den folgenden Typen abgeleitet sind.

Unterstützte Basistypen

Es folgen die unterstützten Basistypen:

  • xs:string

  • xs:boolean

  • xs:decimal

  • xs:float

  • xs:double

  • xs:duration

  • xs:dateTime

  • xs:time

  • xs:date

  • xs:gYearMonth

  • xs:gYear

  • xs:gMonthDay

  • xs:gDay

  • xs:gMonth

  • xs:hexBinary

  • xs:base64Binary

  • xs:anyURI

Unterstützte abgeleitete Typen

Es folgen die unterstützten abgeleiteten Typen:

  • xs:normalizedString

  • xs:token

  • xs:language

  • xs:Name

  • xs:NCName

  • xs:ID

  • xs:IDREF

  • xs:ENTITY

  • xs:integer

  • xs:nonPositiveInteger

  • xs:negativeInteger

  • xs:long

  • xs:int

  • xs:short

  • xs:byte

  • xs:nonNegativeInteger

  • xs:unsignedLong

  • xs:unsignedInt

  • xs:unsignedShort

  • xs:unsignedByte

  • xs:positiveInteger

SQL Server unterstützt außerdem die Reduktion konstanter Ausdrücke beim Aufrufen von Konstruktorfunktionen unter folgenden Bedingungen:

  • Wenn das Argument ein Zeichenfolgenliteral ist, wird der Ausdruck zur Kompilierzeit ausgewertet. Wenn der Wert die Typeinschränkungen nicht erfüllt, wird ein statischer Fehler ausgelöst.

  • Wenn das Argument ein Literal eines anderen Typs ist, wird der Ausdruck zur Kompilierzeit ausgewertet. Wenn der Wert die Typeinschränkungen nicht erfüllt, wird die leere Sequenz zurückgegeben.

Beispiele:

Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom xml-Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-Datenbank.

A. Verwenden der dateTime()-XQuery-Funktion zum Abrufen älterer Produktbeschreibungen

In diesem Beispiel wird ein XML-Beispieldokument zunächst einer Variablen vom Typ xml zugewiesen. Dieses Dokument enthält drei <ProductDescription>-Beispielelemente, von denen jedes ein untergeordnetes <DateCreated>-Element enthält.

Die Variable wird dann abgefragt, um nur diejenigen Produktbeschreibungen abzurufen, die vor einem bestimmten Datum erstellt worden sind. Für Vergleichszwecke verwendet die Abfrage die xs:dateTime()-Konstruktorfunktion, um die Datumswerte zu typisieren.

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] ) } )
        }
 ')

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • Die FOR ... WHERE-Schleifenstruktur wird verwendet, um das <ProductDescription>-Element abzurufen, das die in der WHERE-Klausel angegebene Bedingung erfüllt.

  • Die dateTime()-Konstruktorfunktion wird verwendet, um die Werte vom Typ dateTime zu konstruieren, damit diese ordnungsgemäß verglichen werden können.

  • Anschließend konstruiert die Abfrage die resultierende XML-Ausgabe: Nachdem dabei eine Reihe von Attributen konstruiert wird, werden in der XML-Konstruktion Kommas und Klammern verwendet.

Dies ist das Ergebnis:

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