Funktionen für Sequenzen – distinct-values
Gilt für:SQL Server
Entfernt doppelte Werte aus der durch $arg angegebenen Sequenz. Wenn $arg eine leere Sequenz ist, gibt die Funktion die leere Sequenz zurück.
Syntax
fn:distinct-values($arg as xdt:anyAtomicType*) as xdt:anyAtomicType*
Argumente
$arg
Sequenz der atomaren Werte.
Bemerkungen
Alle Typen der atomisierten Werte, die an distinct-values() übergeben werden, müssen Untertypen desselben Basistyps sein. Akzeptierte Basistypen sind die Typen, die den Eq-Vorgang unterstützen. Diese Typen sind z. B. die drei integrierten numerischen Basistypen, die date/time-Basistypen, xs:string, xs:boolean und xdt:untypedAtomic. Werte des Typs xdt:untypedAtomic werden in xs:string umgewandelt. Wenn eine Mischung dieser Typen vorhanden ist oder andere Werte anderer Typen übergeben werden, wird ein statischer Fehler ausgelöst.
Das Ergebnis von distinct-values() empfängt den Basistyp der übergebenen Typen, z. B. xs:string im Fall von xdt:untypedAtomic, mit der ursprünglichen Kardinalität. Wenn die Eingabe statisch leer ist, wird leer impliziert, und es wird ein statischer Fehler ausgelöst.
Werte vom Typ xs:string werden mit der Unicode-Codepunkt-Standardsortierung von XQuery verglichen.
Beispiele
Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks-Datenbank gespeichert sind.
A. Verwenden der distinct-values()-Funktion zum Entfernen doppelter Werte aus der Sequenz
In diesem Beispiel wird einer XML-Typvariablen eine XML-Instanz zugewiesen, die Telefonnummern enthält. Die für diese Variable angegebene XQuery verwendet die Funktion distinct-values(), um eine Liste von Telefonnummern zu kompilieren, die keine Duplikate enthalten.
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
Dies ist das Ergebnis:
111-111-1111 222-222-2222
In der folgenden Abfrage wird eine Sequenz von Zahlen (1, 1, 2) an die Funktion distinct-values() übergeben. Die Funktion entfernt anschließend die doppelten Werte in der Sequenz und gibt die beiden verbleibenden Werte zurück.
declare @x xml
set @x = ''
select @x.query('
distinct-values((1, 1, 2))
') as result
Die Abfrage gibt 1 2 zurück.
Implementierungseinschränkungen
Die folgenden Einschränkungen sind zu beachten:
Die Funktion distinct-values() ordnet ganzzahlige Werte xs:decimal zu.
Die Funktion distinct-values() unterstützt nur die zuvor genannten Typen und nicht die Mischung von Basistypen.
Die Funktion distinct-values() für xs:duration-Werte wird nicht unterstützt.
Die Option syntactic, die eine Sortierung bereitstellt, wird nicht unterstützt.