Função distinct-values (XQuery)
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 dos valores atomizados passados a distinct-values() precisam ser subtipos do mesmo tipo base. Os tipos base aceitos são os tipos que oferecem 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 mistura desses tipos, ou se outros valores de outros tipos forem passados, será gerado um erro estático.
O resultado de distinct-values() recebe o tipo base dos passados em tipos, como xs:string no caso de xdt:untypedAtomic, com a cardinalidade original. Se a entrada estiver estaticamente vazia, o vazio será implícito e um erro estático será gerado.
Os valores de xs:string são comparados ao agrupamento de ponto de código Unicode padrão XQuery.
Exemplos
Este tópico fornece exemplos de XQuery em instâncias XML armazenadas em várias colunas do tipo xml no banco de dados AdventureWorks2008R2. Para obter uma visão geral de cada uma dessas colunas, consulte Representação de tipo de dados xml no banco de dados do AdventureWorks2008R2.
A. Uso da 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 do tipo xml . O XQuery especificado contra 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 na 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 os valores inteiros para xs:decimal.
A função distinct-values() só oferece suporte aos tipos previamente mencionados e não oferece suporte à combinação de tipos base.
Não é oferecido suporte à função distinct-values() nos valores xs:duration.
Não há suporte para opção sintática que fornece agrupamento.