Fonction data (XQuery)

 

S’applique à : SQL Server

Retourne la valeur typée pour chaque élément spécifié par $arg.

  
fn:data ($arg as item()*) as xdt:untypedAtomic*  

$arg
Séquence d'éléments dont les valeurs typées seront renvoyées.

Les points suivants s'appliquent aux valeurs typées :

  • La valeur typée d'une valeur atomique est la valeur atomique.

  • La valeur typée d'un nœud de texte est la valeur chaîne du nœud de texte.

  • La valeur typée d'un commentaire est la valeur de chaîne du commentaire.

  • La valeur typée d'une instruction de traitement est le contenu de l'instruction de traitement sans le nom cible de l'instruction de traitement.

  • La valeur typée d'un nœud de document est sa valeur de chaîne.

Les points suivants s'appliquent aux nœuds d'attribut et d'élément :

  • Si un nœud d'attribut est typé avec un type de schéma XML, sa valeur typée est la valeur typée correspondante.

  • Si le nœud d’attribut n’est pas typé, sa valeur typée est égale à sa valeur de chaîne qui est retourné comme une instance de xdt : untypedAtomic.

  • Si le nœud d’élément n’a pas été typé, sa valeur typée est égale à sa valeur de chaîne qui est retourné comme une instance de xdt : untypedAtomic.

Les points suivants s'appliquent aux nœuds d'élément typés :

  • Si l’élément a un type de contenu simple data() retourne la valeur typée de l’élément.

  • Si le nœud est de type complexe, notamment xs : anyType, data() renvoie une erreur statique.

Bien que l’utilisation du data() fonction est souvent facultative, comme indiqué dans les exemples suivants, en spécifiant le data() fonction augmente la lisibilité des requêtes. Pour plus d’informations, consultez principes fondamentaux de XQuery.

Vous ne pouvez pas spécifier data() sur du code XML construit, comme indiqué dans le code suivant :

declare @x xml  
set @x = ''  
select @x.query('data(<SomeNode>value</SomeNode>)')  

Cette rubrique fournit des exemples de XQuery sur des instances XML stockés dans différentes xml colonnes de type dans la base de données AdventureWorks.

A. Utilisation de la fonction XQuery data() pour extraire la valeur typée d'un nœud

L’exemple suivant illustre comment la data() fonction est utilisée pour récupérer les valeurs d’un attribut, un élément et un nœud de texte :

WITH XMLNAMESPACES (  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1,  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
  
SELECT CatalogDescription.query(N'  
 for $pd in //p1:ProductDescription  
 return   
    <Root   
      ProductID = "{ data( ($pd//@ProductModelID)[1] ) }"   
      Feature =   "{ data( ($pd/p1:Features/wm:Warranty/wm:Description)[1] ) }" >  
    </Root>  
 ') as Result  
FROM Production.ProductModel  
WHERE ProductModelID = 19  

Voici le résultat obtenu :

<Root ProductID="19" Feature="parts and labor"/>  

Comme mentionné, les data() fonction est facultative lors de la construction des attributs. Si vous ne spécifiez pas le data() (fonction), elle est implicitement sous-entendue. La requête suivante produit les mêmes résultats que la précédente :

WITH XMLNAMESPACES (  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1,  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
  
SELECT CatalogDescription.query('  
      for $pd in //p1:ProductDescription  
         return   
          <Root    
                ProductID = "{ ($pd/@ProductModelID)[1] }"    
                Feature =   "{ ($pd/p1:Features/wm:Warranty/wm:Description)[1] }" >  
           </Root>  
 ') as Result  
FROM Production.ProductModel  
WHERE ProductModelID = 19  

Les exemples suivants illustrent des instances dans lesquelles la data() fonction est nécessaire.

Dans la requête suivante, $pd / P1 : Specifications / Material renvoie le <Material> élément. En outre, data ($pd/P1 : Specifications/Material) retourne des données caractères typées sous xdt : untypedAtomic, car <Material> est non typé. Lorsque l’entrée n’est pas typée, le résultat de data() est de type xdt : untypedAtomic.

SELECT CatalogDescription.query('  
declare namespace p1="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
      for $pd in //p1:ProductDescription  
         return   
          <Root>  
             { $pd/p1:Specifications/Material }  
             { data($pd/p1:Specifications/Material) }  
           </Root>  
 ') as Result  
FROM Production.ProductModel  
WHERE ProductModelID = 19  

Voici le résultat obtenu :

<Root>  
  <Material>Almuminum Alloy</Material>Almuminum Alloy  
</Root>  

Dans la requête suivante, data($pd/p1:Features/wm:Warranty) renvoie une erreur statique car <Warranty> est un élément de type complexe.

WITH XMLNAMESPACES (  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1,  
'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
  
SELECT CatalogDescription.query('  
 <Root>  
   {     /p1:ProductDescription/p1:Features/wm:Warranty }  
   { data(/p1:ProductDescription/p1:Features/wm:Warranty) }  
 </Root>  
 ') as Result  
FROM  Production.ProductModel  
WHERE ProductModelID = 23  

Fonctions XQuery sur le Type de données xml

Ajouts de la communauté

AJOUTER
Afficher: