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 Typ xml in der AdventureWorks-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-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"/>