Share via


Funciones usadas en secuencias: distinct-values

Se aplica a:SQL Server

Quita los valores duplicados de la secuencia especificada por $arg. Si $arg es una secuencia vacía, la función devuelve la secuencia vacía.

Sintaxis

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

Argumentos

$arg
Secuencia de valores atómicos.

Comentarios

Todos los tipos de los valores atomizados que se pasan a distinct-values() deben ser subtipos del mismo tipo base. Los tipos base que se aceptan son los tipos que admiten la operación de eq . Entre estos tipos se incluyen los tres tipos base numéricos integrados, los tipos base de fecha y hora, xs:string, xs:boolean y xdt:untypedAtomic. Los valores de tipo xdt:untypedAtomic se convierten en xs:string. Si hay una combinación de estos tipos, o si se pasan otros valores de otros tipos, se genera un error estático.

El resultado de distinct-values() recibe el tipo base de los tipos pasados, como xs:string en el caso de xdt:untypedAtomic, con la cardinalidad original. Si la entrada está vacía estáticamente, está vacía y se genera un error estático.

Los valores de tipo xs:string se comparan con la intercalación de punto de código Unicode predeterminada de XQuery.

Ejemplos

En este tema se proporcionan ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.

A. Usar la función distinct-values() para quitar valores duplicados de la secuencia

En este ejemplo, se asigna una instancia XML que contiene números de teléfono a una variable de tipo xml . El XQuery especificado en esta variable usa la función distinct-values() para compilar una lista de números de teléfono que no contienen duplicados.

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  

El resultado es el siguiente:

111-111-1111 222-222-2222    

En la consulta siguiente, se pasa una secuencia de números (1, 1, 2) a la función distinct-values(). A continuación, la función quita el duplicado de la secuencia y devuelve los otros dos valores.

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

La consulta devuelve 1 y 2.

Limitaciones de la implementación

Éstas son las limitaciones:

  • La función distinct-values() asigna valores enteros a xs:decimal.

  • La función distinct-values() solo admite los tipos mencionados anteriormente y no admite la mezcla de tipos base.

  • No se admite la función distinct-values() en los valores xs:duration.

  • No se admite la opción sintáctica que proporciona una intercalación.

Consulte también

Funciones de XQuery con el tipo de datos xml