Fonctions sur les séquences - valeurs distinctes

 

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

Supprime les doublons de la séquence spécifiée par $arg. Si $arg est une séquence vide, la fonction retourne la séquence vide.

  
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*  

$arg
Séquence de valeurs atomiques.

Tous les types de valeurs atomisées transmises à values doivent être des sous-types du même type de base. Types de base acceptés sont les types qui prennent en charge la eq opération. Ces types incluent les trois types numériques de base intégrés, les types de base date/heure et les types xs:string (chaîne), xs:boolean (booléen) et xdt:untypedAtomic (atomique non typé). Les valeurs de type xdt:untypedAtomic sont converties en type xs:string. En cas de mélange de ces types ou si des valeurs d'autres types sont transmis, une erreur statique se produit.

Le résultat de values reçoit le type de base des types transmis, tels que xs : String dans le cas de xdt : untypedAtomic, avec la cardinalité d’origine. Si l'entrée est vide (valeur empty) de façon statique, « empty » est alors implicite et une erreur statique est émise.

Les valeurs de type xs:string sont comparées au classement de point de codes Unicode par défaut de XQuery.

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

A. Utilisation de la fonction distinct-values() pour supprimer les valeurs en double d'une séquence

Dans cet exemple, une instance XML qui contient les numéros de téléphone est attribuée à un xml variable de type. La requête XQuery sur cette variable utilise le values fonction pour compiler une liste de numéros de téléphone qui ne contiennent pas de doublons.

declare @x xml  
set @x = '<PhoneNumbers>  
 <Number>111-111-1111</Number>  
 <Number>111-111-1111</Number>  
 <Number>222-222-2222</Number>  
</PhoneNumbers>'  
-- 1st select  
select @x.query('  
  distinct-values( data(/PhoneNumbers/Number) )  
') as result  

Voici le résultat obtenu :

111-111-1111 222-222-2222    

Dans la requête suivante, une séquence de nombres (1, 1, 2) est transmise à la values (fonction). La fonction supprime ensuite la valeur en double de la séquence et renvoie les deux autres.

declare @x xml  
set @x = ''  
select @x.query('  
  distinct-values((1, 1, 2))  
') as result  

La requête renvoie « 1 2 ».

Limites de mise en œuvre

Les limitations suivantes s'appliquent :

  • Le values fonction mappe les valeurs entières à xs : decimal.

  • Le values fonction prend en charge les types mentionnés précédemment uniquement et ne prend pas en charge le mélange de types de base.

  • Le values fonction sur les valeurs xs : Duration n’est pas pris en charge.

  • L'option syntaxique fournissant un classement n'est pas prise en charge.

Fonctions XQuery sur le Type de données xml

Ajouts de la communauté

AJOUTER
Afficher: