Fonctions de contexte - position (XQuery)

 

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data WarehousenonParallel Data Warehouse

Renvoie une valeur entière indiquant la position de l'élément contextuel dans la séquence d'éléments en cours de traitement.

  
fn:position() as xs:integer  

Dans SQL Server, :position() peut uniquement être utilisé dans le contexte d’un prédicat dépendant du contexte. Plus précisément, elle ne peut être utilisée qu'entre crochets ([ ]).Toute comparaison à cette fonction ne réduit pas la cardinalité lors de l'inférence de type statique.

Cette rubrique fournit des exemples de XQuery relatifs à des instances XML stockés dans différentes xml colonnes de type le AdventureWorks2012 base de données.

A. Utilisation de la fonction XQuery position() pour récupérer les deux premières caractéristiques de produits

La requête suivante récupère les deux premières caractéristiques de produits, correspondant aux deux premiers éléments enfants de l'élément <Features>, tirées de la description du catalogue retraçant les modèles de produits. Si d'autres caractéristiques sont présentes, elle ajoute un élément <there-is-more/> (« Et plus encore ») au résultat.

SELECT CatalogDescription.query('  
     declare namespace pd="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
     <Product>   
          { /pd:ProductDescription/@ProductModelID }  
          { /pd:ProductDescription/@ProductModelName }   
          {  
            for $f in /pd:ProductDescription/pd:Features/*[position()<=2]  
            return  
            $f   
          }  
          {  
            if (count(/pd:ProductDescription/pd:Features/*) > 2)  
            then <there-is-more/>  
            else ()  
          }   
     </Product>          
') as x  
FROM Production.ProductModel  
WHERE CatalogDescription is not null  

Notez les points suivants dans la requête précédente :

  • Le espace de noms mot clé dans le prologue XQuery définit un préfixe d’espace de noms qui est utilisé dans le corps de la requête.

  • Le corps de la requête construit le document XML qui a un <> > élément avec ProductModelID et ProductModelName d’attributs et dispose de fonctionnalités de produit retournées en tant qu’éléments enfants.

  • Le position() fonction est utilisée dans le prédicat pour déterminer la position de la <> > élément enfant dans le contexte. Si l'élément correspond à la première ou à la deuxième caractéristique, il est renvoyé dans les résultats.

  • L'instruction IF ajoute un élément <there-is-more/> au résultat s'il existe plus de deux caractéristiques présentes dans le catalogue de produits.

  • Puisque les modèles de produits n'ont pas tous leur description de catalogue stockée dans la table, la clause WHERE permet de passer outre les lignes où CatalogDescriptions correspond à NULL.

Voici un extrait du résultat :

<Product ProductModelID="19" ProductModelName="Mountain 100">  
  <p1:Warranty xmlns:p1="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
    <p1:WarrantyPeriod>3 year</p1:WarrantyPeriod>  
    <p1:Description>parts and labor</p1:Description>  
  </p1:Warranty>  
  <p2:Maintenance xmlns:p2="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">  
    <p2:NoOfYears>10</p2:NoOfYears>  
    <p2:Description>maintenance contact available through your dealer or  
                    any AdventureWorks retail store.</p2:Description>  
  </p2:Maintenance>  
  <there-is-more/>  
</Product>   
…  

Fonctions XQuery sur le Type de données xml

Ajouts de la communauté

AJOUTER
Afficher: