Partager via


Fonction distinct-values (XQuery)

Supprime les valeurs en double d'une séquence spécifiée par $arg. La fonction renvoie une séquence vide si $arg correspond à une séquence vide.

Syntaxe

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

Argument

  • $arg
    Séquence de valeurs atomiques.

Notes

Tous les types de valeurs atomisées transmises à distinct-values() doivent être du même sous-type que le type de base. Les types de base acceptés correspondent à ceux 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. 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 la fonction distinct-values() reçoit le type de base des types transmis, tel que xs:string dans le cas du type xdt:untypedAtomic, avec sa 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 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 distinct-values() pour supprimer les valeurs en double d'une séquence

Dans cet exemple, une instance XML contenant des numéros de téléphone est affectée à une variable de type xml. La requête XQuery spécifiée sur cette variable utilise la fonction distinct-values() pour compiler une liste de numéros de téléphone ne contenant 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 chiffres (1, 1, 2) est transmise à 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 ».

Limitations relatives à son implémentation

Les limitations suivantes s'appliquent :

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

  • La fonction distinct-values() ne prend en charge que les types précédemment mentionnés et n'accepte pas les combinaisons de types de base.

  • La fonction distinct-values() appliquée à des valeurs de type xs:duration (durée) n'est pas prise en charge.

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