Freigeben über


concat-Funktion (XQuery)

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.

Hinweise

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

Beispiele

Diese Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten des xml-Typs in der AdventureWorks-Beispieldatenbank gespeichert werden. Einen Überblick über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks-Datenbank.

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 <Warranty>-Element aus den untergeordneten <WarrantyPeriod>- und <Description>-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 Spalte vom Typ xml. 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 zum Definieren des Präfixes für den Namespace verwendet. 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 ein <ProductDescription>-Element in den Zeilen enthält.

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 von der exist()-Methode des xml-Datentyps zurückgegebene boolesche Wert mit 1 verglichen wird.

Implementierungseinschränkungen

Die folgenden Einschränkungen sind zu beachten:

  • Die concat()-Funktion in SQL Server nimmt nur Werte des Typs xs:string an. Andere Werte müssen explizit in xs:string oder xdt:untypedAtomic umgewandelt werden.