Partager via


Fonctions sur les séquences : distinct-values

S’applique à :SQL Server

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

Syntaxe

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

Arguments

$arg
Séquence de valeurs atomiques.

Remarques

Tous les types de valeurs atomisées qui sont passées à distinct-values() doivent être des sous-types du même type de base. Les types de base acceptés sont les types qui prennent en charge l’opération eq . 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. S’il existe un mélange de ces types ou si d’autres valeurs d’autres types sont transmises, une erreur statique est générée.

Le résultat de distinct-values() reçoit le type de base du transmis dans les types, 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.

Exemples

Cette rubrique fournit des exemples XQuery par rapport aux instances XML stockées dans différentes colonnes de type XML dans la base de données AdventureWorks.

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

Dans cet exemple, une instance XML qui contient des numéros de téléphone est affectée à une variable de type xml . La requête XQuery spécifiée par rapport à cette variable utilise la fonction distinct-values() 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 passée à la fonction distinct-values(). 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 :

  • La fonction distinct-values() mappe les valeurs entières à xs:decimal.

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

  • La fonction distinct-values() sur les valeurs xs:duration n’est pas prise en charge.

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

Voir aussi

Fonctions XQuery impliquant le type de données xml