Funzioni su sequenze - distinct-values
Si applica a: SQL Server
Rimuove i valori duplicati dalla sequenza specificata da $arg. Se $arg è una sequenza vuota, la funzione restituisce la sequenza vuota.
Sintassi
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argomenti
$arg
Sequenza di valori atomici.
Osservazioni:
Tutti i tipi dei valori atomizzati passati a distinct-values() devono essere sottotipi dello stesso tipo di base. I tipi di base accettati sono i tipi che supportano l'operazione eq . Tra questi tipi sono inclusi i tre tipi di base numerici predefiniti, ovvero i tipi di base di data/ora xs:string, xs:boolean e xdt:untypedAtomic. Per i valori di tipo xdt:untypedAtomic viene eseguito il cast a xs:string. In presenza di una combinazione di questi tipi o nel caso in cui vengano passati altri valori di altri tipi, viene restituito un errore statico.
Il risultato di distinct-values() riceve il tipo di base dei tipi passati, ad esempio xs:string nel caso di xdt:untypedAtomic, con la cardinalità originale. Se l'input è una sequenza vuota calcolata in modo statico, la sequenza vuota è implicita e viene restituito un errore statico.
I valori di tipo xs:string vengono confrontati con le regole di confronto dei punti di codice Unicode predefinite XQuery.
Esempi
In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.
R. Utilizzo della funzione distinct-values() per rimuovere valori duplicati dalla sequenza
In questo esempio, un'istanza XML che contiene numeri di telefono viene assegnata a una variabile di tipo xml . L'espressione XQuery specificata per questa variabile usa la funzione distinct-values() per compilare un elenco di numeri di telefono che non contengono duplicati.
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
Risultato:
111-111-1111 222-222-2222
Nella query seguente viene passata una sequenza di numeri (1, 1, 2) alla funzione distinct-values(). La funzione rimuove quindi il duplicato dalla sequenza e restituisce gli altri due.
declare @x xml
set @x = ''
select @x.query('
distinct-values((1, 1, 2))
') as result
La query restituisce 1 2.
Limitazioni di implementazione
Limitazioni:
La funzione distinct-values() esegue il mapping dei valori integer a xs:decimal.
La funzione distinct-values() supporta solo i tipi indicati in precedenza e non supporta la combinazione di tipi di base.
La funzione distinct-values() sui valori xs:duration non è supportata.
Non è supportata l'opzione sintattica che fornisce le regole di confronto.