Konstruktorfunktionen (XQuery)
Gilt für: SQL Server
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", die "xdt:yearMonthDuration" und "xdt:dayTimeDuration" und "xs:QName", "xs:NMTOKEN" und "xs:NOTATION " enthalten, 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 enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen XML-Typspalten in der AdventureWorks-Datenbank gespeichert sind.
A. Abrufen älterer Produktbeschreibungen mit der dateTime()-Funktion von XQuery
In diesem Beispiel wird einem XML-Beispieldokument zuerst eine XML-Typvariable zugewiesen. Dieses Dokument enthält drei Beispielelemente <ProductDescription
> mit jedem Element, das 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 Datumsangaben einzugeben.
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 ... DIE 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 dateTime-Typwerte zu erstellen, damit sie entsprechend 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"/>
Weitere Informationen
XML Construction (XQuery) (XML-Konstruktion (XQuery))
XQuery Functions against the xml Data Type (XQuery-Funktionen für den xml-Datentyp)