Freigeben über


Funktionen für Zeichenfolgenwerte – concat

Gilt für:SQL Server

Nimmt null oder mehr Zeichenfolgen als Argumente an und gibt eine Zeichenfolge zurück, die durch Verketten der Werte der einzelnen Argumente erstellt wird.

Syntax

  
fn:concat ($string as xs:string?  
           ,$string as xs:string?  
           [, ...]) as xs:string  

Argumente

$string
Optionale zu verkettende Zeichenfolge.

Bemerkungen

Die Funktion erfordert mindestens zwei Argumente. Wenn ein Argument eine leere Sequenz ist, wird diese als eine Zeichenfolge mit der Länge Null behandelt.

Ergänzende Zeichen (Ersatzpaare)

Das Verhalten von Ersatzzeichenpaaren in XQuery-Funktionen hängt vom Kompatibilitätsgrad der Datenbank ab und in einigen Fällen vom Standardnamespace-URI für Funktionen. Weitere Informationen finden Sie im Abschnitt "XQuery-Funktionen sind ersatzfähig" im Thema Breaking Changes to Database Engine Features in SQL Server 2016. Weitere Informationen finden Sie unter ALTER DATABASE Compatibility Level (Transact-SQL) und Sortierung und Unicode-Unterstützung.

Beispiele

Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks-Beispieldatenbank gespeichert sind.

A. Verwenden der concat()-Funktion von XQuery zum Verketten von Zeichenfolgen

Diese Abfrage gibt für ein bestimmtes Produktmodell eine Zeichenfolge zurück, die durch Verketten des Garantiezeitraumes und der Garantiebeschreibung erstellt wird. Im Katalogbeschreibungsdokument besteht das <>WarrantyElement ausWarrantyPeriod<> und <Description> untergeordneten Elementen.

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
SELECT CatalogDescription.query('  
    <Product   
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"  
        ProductModelName = "{ sql:column("PD.Name") }" >  
        {   
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",  
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))   
         }   
     </Product>  
 ') as Result  
FROM Production.ProductModel PD  
WHERE  PD.ProductModelID=28  
  

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • In der SELECT-Klausel ist CatalogDescription eine Xml-Typspalte . Daher wird die query()-Methode (XML-Datentyp), Instructions.query(), verwendet. Die XQuery-Anweisung wird als Argument der query-Methode angegeben.

  • Das Dokument, für das die Abfrage ausgeführt wird, verwendet Namespaces. Daher wird das Namespace-Schlüsselwort verwendet, um das Präfix für den Namespace zu definieren. Weitere Informationen finden Sie unter XQuery Prolog.

Dies ist das Ergebnis:

<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>  

Die vorherige Abfrage ruft Informationen für ein bestimmtes Produkt ab. Die folgende Abfrage ruft die gleichen Informationen für alle Produkte ab, für die XML-Katalogbeschreibungen gespeichert sind. Die exist() -Methode des xml-Datentyps in der WHERE-Klausel gibt True zurück, wenn das XML-Dokument in den Zeilen über ein <ProductDescription> Element verfügt.

WITH XMLNAMESPACES (  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,  
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)  
  
SELECT CatalogDescription.query('  
    <Product   
        ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"   
        ProductName = "{ sql:column("PD.Name") }" >  
        {   
          concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",  
                  string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))   
         }   
     </Product>  
 ') as Result  
FROM Production.ProductModel PD  
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1  
  

Beachten Sie, dass der boolesche Wert, der von der exist() -Methode des xml-Typs zurückgegeben wird, mit 1 verglichen wird.

Implementierungseinschränkungen

Die folgenden Einschränkungen sind zu beachten:

  • Die funktion concat() in SQL Server akzeptiert nur Werte vom Typ xs:string. Andere Werte müssen explizit in xs:string oder xdt:untypedAtomic umgewandelt werden.

Weitere Informationen

XQuery-Funktionen für den xml-Datentyp