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.

Weitere Informationen

XQuery-Funktionen für den xml-Datentyp