distinct-values (función de XQuery)

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.

Notas

Todos los tipos de valores atomizados que se pasan a distinct-values() deben ser subtipos del mismo tipo base. Los tipos base aceptados son los tipos que admiten la operación 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 un mezcla de estos tipos, o si se pasan otros valores de otros tipos, se produce 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 se trata de una entrada vacía estática, se presupone que 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 ofrecen ejemplos de consultas XQuery con instancias XML almacenadas en varias columnas de tipo xml en la base de datos AdventureWorks. Para obtener información general de cada una de estas columnas, vea Representación de tipo de datos xml en la base de datos AdventureWorks.

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

En este ejemplo, una instancia XML que contiene números de teléfono se asigna a una variable de tipo xml. La expresión XQuery especificada para esta variable utiliza la función distinct-values() para compilar una lista de números de teléfono que no contenga 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() sólo admite los tipos mencionados anteriormente y no una combinación de tipos base.
  • No se admite la función distinct-values() para valores xs:duration.
  • No se admite la opción sintáctica que proporciona una intercalación.

Vea también

Referencia

Funciones de XQuery con el tipo de datos xml

Ayuda e información

Obtener ayuda sobre SQL Server 2005