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 fournit des exemples de requêtes XQuery impliquant des instances XML stockées dans différentes colonnes de type xml dans la base de données AdventureWorks. Pour une vue d'ensemble de chacune de ces colonnes, consultez Représentation du type de données xml dans la base de données AdventureWorks.
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
Référence
Fonctions XQuery impliquant le type de données xml