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.