Funções em Sequências – distinct-values
Aplica-se a:SQL Server
Remove valores duplicados da sequência especificada por $arg. Se $arg for uma sequência vazia, a função retornará a sequência vazia.
Sintaxe
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argumentos
$arg
Sequência de valores atômicos.
Comentários
Todos os tipos de valores atomizados que são passados para distinct-values() precisam ser subtipos do mesmo tipo base. Os tipos base aceitos são os tipos que dão suporte à operação eq . Esses tipos incluem os três tipos base numéricos internos, os tipos base de data/hora, xs:string, xs:boolean e xdt:untypedAtomic. Os valores do tipo xdt:untypedAtomic são convertidos em xs:string. Se houver uma combinação desses tipos ou se outros valores de outros tipos forem passados, um erro estático será gerado.
O resultado de distinct-values() recebe o tipo base dos tipos passados, como xs:string no caso de xdt:untypedAtomic, com a cardinalidade original. Se a entrada estiver estaticamente vazia, vazio será implícito e um erro estático será gerado.
Os valores de xs:string são comparados à ordenação de ponto de código Unicode padrão XQuery.
Exemplos
Este tópico fornece exemplos XQuery em instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.
a. Usando a função distinct-values() para remover valores duplicados da sequência
Neste exemplo, uma instância XML que contém números de telefone é atribuída a uma variável de tipo xml . O XQuery especificado em relação a essa variável usa a função distinct-values() para compilar uma lista de números de telefone que não contêm duplicatas.
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
Este é o resultado:
111-111-1111 222-222-2222
Na consulta a seguir, uma sequência de números (1, 1, 2) é passada para a função distinct-values(). A função remove então a duplicata na sequência e retorna as outras duas.
declare @x xml
set @x = ''
select @x.query('
distinct-values((1, 1, 2))
') as result
A consulta retorna 1 2.
Limitações de implementação
Estas são as limitações:
A função distinct-values() mapeia valores inteiros para xs:decimal.
A função distinct-values() dá suporte apenas aos tipos mencionados anteriormente e não dá suporte à combinação de tipos base.
Não há suporte para a função distinct-values() em valores xs:duration.
Não há suporte para opção sintática que fornece ordenação.