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 <>Warranty
Element 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.