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"/>