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.