Funções em Sequências – distinct-values
Aplica-se: 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() devem ser subtipos do mesmo tipo base. Os tipos base aceitos são os tipos que dão suporte à operação de equalização . 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 tipos passados, como xs:string no caso de xdt:untypedAtomic, com a cardinalidade original. Se a entrada estiver estaticamente vazia, vazio estará 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 de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.
R. 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() suporta apenas os tipos mencionados anteriormente e não suporta a mistura de tipos base.
A função distinct-values() em valores xs:duration não é suportada.
Não há suporte para opção sintática que fornece ordenação.