+ (Verketten von Zeichenfolgen) (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Ein Operator in einem Zeichenfolgenausdruck, der zwei oder mehr Zeichenfolgen, binäre Zeichenfolgen oder Spalten oder eine Kombination aus Zeichenfolgen und Spaltennamen zu einem Ausdruck verkettet (ein Zeichenfolgenoperator). SELECT 'book'+'case'; gibt beispielsweise bookcase zurück.

Transact-SQL-Syntaxkonventionen

Syntax

expression + expression  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

expression
Ein beliebiger gültiger Ausdruck aus der binären Datentypkategorie oder der Datentypkategorie der Zeichen, mit Ausnahme der Datentypen image, ntext oder text. Beide Ausdrücke müssen denselben Datentyp haben, oder es muss möglich sein, einen Ausdruck implizit in den Datentyp des anderen Ausdrucks zu konvertieren.

Bei der Verkettung binärer Zeichenfolgen und Zeichen zwischen den binären Zeichenfolgen muss eine explizite Konvertierung in Zeichendaten erfolgen. Das folgende Beispiel zeigt, wann CONVERT (oder CAST) bei binärer Verkettung zu verwenden ist und wann CONVERT (oder CAST) nicht verwendet werden muss.

DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5)  
SET @mybin1 = 0xFF  
SET @mybin2 = 0xA5  
-- No CONVERT or CAST function is required because this example   
-- concatenates two binary strings.  
SELECT @mybin1 + @mybin2  
-- A CONVERT or CAST function is required because this example  
-- concatenates two binary strings plus a space.  
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '   
   + CONVERT(VARCHAR(5), @mybin2)  
-- Here is the same conversion using CAST.  
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '   
   + CAST(@mybin2 AS VARCHAR(5))  

Ergebnistypen

Gibt einen Wert vom Datentyp des Arguments zurück, das in der Rangfolge am höchsten steht. Weitere Informationen finden Sie unter Rangfolge der Datentypen (Transact-SQL).

Hinweise

Der +-Operator (Verketten von Zeichenfolgen) verhält sich anders, wenn er zusammen mit einer leeren Zeichenfolge verwendet wird, als wenn er mit einem NULL-Wert oder unbekannten Werten verwendet wird. Eine leere Zeichenfolge lässt sich als zwei einfache Anführungszeichen ohne Zeichen innerhalb der Anführungszeichen angeben. Eine leere binäre Zeichenfolge lässt sich als 0x ohne Bytewerte in der hexadezimalen Konstante angeben. Beim Verketten einer leeren Zeichenfolge werden immer die beiden angegebenen Zeichenfolgen verkettet. Wenn Sie mit Zeichenfolgen mit einem NULL-Wert arbeiten, hängt das Ergebnis der Verkettung von den Sitzungseinstellungen ab. Bei arithmetischen Operationen, die für NULL-Werte ausgeführt werden, ist das Ergebnis beim Hinzufügen eines NULL-Wertes zu einem bekannten Wert in der Regel ein unbekannter Wert. Parallel dazu führt eine Zeichenfolgenverkettungsoperation, die mit einem NULL-Wert ausgeführt wird, in der Regel zu einem NULL-Ergebnis. Sie können dieses Verhalten jedoch ändern, indem Sie die CONCAT_NULL_YIELDS_NULL-Einstellung für die aktuelle Sitzung ändern. Weitere Informationen finden Sie unter SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Wenn das Ergebnis der Verkettung von Zeichenfolgen den Grenzwert von 8.000 Byte übersteigt, wird das Ergebnis abgeschnitten. Wenn jedoch mindestens eine der verketteten Zeichenfolgen einen umfangreichen Wert hat, wird das Ergebnis nicht abgeschnitten.

Beispiele

A. Verwenden von Zeichenfolgenverkettungen

Im folgenden Beispiel wird unter der Spaltenüberschrift Name eine einzelne Spalte aus mehreren Zeichenspalten erstellt, mit dem Nachnamen der Person, gefolgt von einem Komma, einem einzelnen Leerzeichen und dem Vornamen der Person. Das Resultset ist in aufsteigender alphabetischer Reihenfolge sortiert (zuerst nach dem Nachnamen und dann nach dem Vornamen).

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + FirstName) AS Name  
FROM Person.Person  
ORDER BY LastName ASC, FirstName ASC;  

B. Kombinieren von numerischen Datentypen und Datumsdatentypen

Im folgenden Beispiel werden die Datentypen numeric und date mithilfe der CONVERT-Funktion verkettet.

-- Uses AdventureWorks  
  
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)  
FROM Sales.SalesOrderHeader  
WHERE SalesOrderID = 50001;  
GO  

Hier ist das Resultset.

------------------------------------------------  
The order is due on 04/23/2007  
(1 row(s) affected)

C. Verwenden der Verkettung mehrerer Zeichenfolgen

Im folgenden Beispiel werden mehrere Zeichenfolgen verkettet, um eine lange Zeichenfolge zu bilden. Dabei wird der Nachname und der Anfangsbuchstabe des Vornamens der Vizepräsidenten in Adventure Works Cycles angezeigt. Nach dem Nachnamen wird ein Komma hinzugefügt. Nach dem Anfangsbuchstaben des Vornamens wird ein Punkt hinzugefügt.

-- Uses AdventureWorks  
  
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle  
FROM Person.Person AS p  
    JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle LIKE 'Vice%'  
ORDER BY LastName ASC;  
GO  

Hier ist das Resultset.

Name               Title  
-------------      ---------------`  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

(3 row(s) affected)

D: Verwenden von langen Zeichenfolgen bei Verkettungen

Im folgenden Beispiel werden mehrere Zeichenfolgen zu einer langen Zeichenfolge verkettet. Anschließend wird versucht, die Länge der endgültigen Zeichenfolge zu berechnen. Die endgültige Länge des Resultsets beträgt 16000, da die Auswertung des Ausdrucks links beginnt, d.h. @x + @z + @y = >(@x + @z) + @y. In diesem Fall wird das Ergebnis von (@x +@z) wird bei 8000 Byte abgeschnitten. Anschließend wird @y dem Resultset hinzugefügt, sodass sich die endgültige Zeichenfolgenlänge 16000 ergibt. Da @y eine Zeichenfolge vom Typ für hohe Werte ist, werden keine Daten abgeschnitten.

DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO

Hier ist das Resultset.

y        
-------  
16000  
 
(1 row(s) affected)

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

E. Verwenden der Verkettung mehrerer Zeichenfolgen

Im folgenden Beispiel werden mehrere Zeichenfolgen verkettet, um eine lange Zeichenfolge zu bilden. Dabei wird der Nachname und der Anfangsbuchstabe des Vornamens der Vizepräsidenten in einer Beispieldatenbank angezeigt. Nach dem Nachnamen wird ein Komma hinzugefügt. Nach dem Anfangsbuchstaben des Vornamens wird ein Punkt hinzugefügt.

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title  
FROM DimEmployee  
WHERE Title LIKE '%Vice Pres%'  
ORDER BY LastName ASC;  

Hier ist das Resultset.

Name               Title                                           
-------------      ---------------  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

Weitere Informationen

+= (Zeichenfolgenverkettungszuweisung) (Transact-SQL)
ALTER DATABASE (Transact-SQL)
CAST und CONVERT (Transact-SQL)
Datentypkonvertierung (Datenbank-Engine)
Datentypen (Transact-SQL)
Ausdrücke (Transact-SQL)
Integrierte Funktionen (Transact-SQL)
Operatoren (Transact-SQL)
SELECT (Transact-SQL)
SET-Anweisungen (Transact-SQL)