Fonctions constructeur (XQuery)
À partir d'une entrée spécifiée, les fonctions constructeur créent des instances de n'importe quel type atomique XSD intégré ou défini par l'utilisateur.
Syntaxe
TYP($atomicvalue as xdt:anyAtomicType?
) as TYP?
Arguments
$strval
Chaîne à convertir.TYP
Tout type XSD intégré.
Notes
Les constructeurs sont pris en charge pour les types XSD de base et dérivés. Toutefois, les sous-types de xs:duration, qui comprend xdt:yearMonthDuration et xdt:dayTimeDuration, ainsi que de xs:QName, xs:NMTOKEN et xs:NOTATION ne sont pas pris en charge. Les types atomiques définis par l'utilisateur présents dans les collections de schémas associées sont également disponibles, sous réserve qu'ils soient directement ou indirectement dérivés des types ci-après.
Types de base pris en charge
Les types de base pris en charge sont les suivants :
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
Types dérivés pris en charge
Les types dérivés pris en charge sont les suivants :
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
En outre, SQL Server prend en charge l'assemblage de constantes pour les appels de fonction de construction des façons suivantes :
Si l'argument est un littéral de chaîne, l'expression est évaluée pendant la compilation. Lorsque la valeur ne satisfait pas aux contraintes de type, une erreur statique est déclenchée.
Si l'argument est un littéral d'un autre type, l'expression est évaluée pendant la compilation. Lorsque la valeur ne satisfait pas aux contraintes de type, la séquence vide est renvoyée.
Exemples
Cette rubrique propose des exemples de XQuery relatifs à des instances XML stockés dans différentes colonnes de type xml tirées de la base de données AdventureWorks2008R2. Pour obtenir une vue d'ensemble de chacune de ces colonnes, consultez Représentation du type de données xml dans la base de données AdventureWorks2008R2.
A. Utilisation de la fonction XQuery dateTime() pour extraire les anciennes descriptions de produits
Dans cette illustration, un exemple de document XML est d'abord affecté à une variable de type xml. Ce document contient trois exemples d'éléments <ProductDescription>, possédant chacun un élément enfant <DateCreated>.
La variable est ensuite interrogée afin que ne soient extraites que les descriptions de produits créées avant une date spécifique. À des fins de comparaison, la requête utilise la fonction constructeur xs:dateTime() pour définir le type des dates.
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] ) } )
}
')
Notez les points suivants par rapport à la requête ci-dessus :
La structure de bouclage FOR ... WHERE permet d'extraire l'élément <ProductDescription> satisfaisant à la condition spécifiée dans la clause WHERE.
La fonction constructeur dateTime() permet de construire des valeurs de type dateTime afin qu'elles puissent être comparées correctement.
La requête construit ensuite le document XML obtenu. Étant donné que vous construisez une séquence d'attributs, des virgules et des parenthèses sont utilisées dans la construction XML.
Voici le résultat obtenu :
<Product
ProductID="1"
DateCreated="2000-01-01T00:00:00Z"/>
Voir aussi