CONCAT (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

Diese Funktion gibt eine Zeichenfolge zurück, die das Ergebnis einer End-to-End-Verkettung oder -Verknüpfung von mindestens zwei Zeichenfolgenwerten darstellt.

Hinweis

Zum Hinzufügen eines Trennwerts beim Verkettungsvorgang verwenden Sie CONCAT_WS.

Transact-SQL-Syntaxkonventionen

Syntax

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

Hinweis

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

Argumente

argument1, argument2 [ , argumentN ]

Ein Ausdruck eines beliebigen Zeichenfolgenwerts. Die CONCAT-Funktion erfordert mindestens zwei Argumente und lässt nicht mehr als 254 Argumente zu.

Rückgabetypen

Ein Zeichenfolgenwert, dessen Länge und Typ von der Eingabe abhängig sind.

Bemerkungen

CONCAT lässt eine variable Anzahl von Zeichenfolgenargumenten zu und verkettet (oder verknüpft) sie in einer einzelnen Zeichenfolge. Es sind mindestens zwei Eingabewerte erforderlich. Andernfalls löst CONCAT einen Fehler aus. Alle Argumente werden von CONCAT vor der Verkettung implizit in Zeichenfolgentypen konvertiert. NULL-Werte werden von CONCAT implizit in leere Zeichenfolgen konvertiert. Wenn CONCAT Argumente nur mit NULL-Werten empfängt, wird eine leere Zeichenfolge vom Typ varchar(1) zurückgegeben. Die implizite Konvertierung in Zeichenfolgen erfolgt basierend auf den vorhandenen Regeln für Datentypkonvertierungen. Weitere Informationen zu Datentypkonvertierungen finden Sie unter CAST und CONVERT (Transact-SQL).

Der Rückgabetyp hängt vom Typ der Argumente ab. In der folgenden Tabelle wird die Zuordnung veranschaulicht:

Eingabetyp Ausgabetyp und -länge
1. Jedes Argument eines SQL-CLR-Systemtyps, eines SQL-CLR UDT oder nvarchar(max) nvarchar(max)
2. Für ein Argument vom Typ varbinary(max) oder varchar(max) varchar(max) , sofern keiner der Parameter vom Typ nvarchar mit beliebiger Länge ist. In diesem Fall gibt CONCAT ein Ergebnis vom Typ nvarchar(max) zurück.
3. Andernfalls jedes Argument vom Typ nvarchar mit höchstens 4000 Zeichen (nvarchar(<= 4000)) nvarchar(<= 4000)
4. In allen anderen Fällen jedes Argument vom Typ varchar von bis zu 8.000 Zeichen (varchar(<= 8000)), sofern keiner der Parameter vom Typ nvarchar mit beliebiger Länge ist. In diesem Fall gibt CONCAT ein Ergebnis vom Typ nvarchar(max) zurück.

Wenn CONCAT Eingabeargumente vom Typ nvarchar mit einer Länge von <= 4.000 Zeichen oder Eingabeargumente vom Typ varchar mit einer Länge von <= 8.000 Zeichen empfängt, können implizite Konvertierungen die Länge des Ergebnisses beeinflussen. Andere Datentypen besitzen andere Längen, wenn sie implizit in Zeichenfolgen konvertiert werden. Ein int mit Wert 14 hat z.B. eine Zeichenfolgenlänge von 2, während ein float mit Wert 1234.56789 eine Länge von 7 (1234.57) hat. Aus diesem Grund gibt eine Verkettung dieser zwei Werte ein Ergebnis mit einer Länge von mindestens 9 Zeichen zurück.

Wenn keines der Eingabeargumente einen unterstützten LOB-Typ (Large Object) aufweist, wird der Rückgabetyp unabhängig vom Rückgabetyp auf eine Länge von 8.000 Zeichen gekürzt. Durch diese Kürzung wird Speicherplatz eingespart und die Effizienz der Plangenerierung unterstützt.

CONCAT kann remote auf einem verknüpften Server mit SQL Server 2012 (11.x) und höheren Versionen ausgeführt werden. Bei älteren Verbindungsservern wird der CONCAT-Vorgang lokal ausgeführt, nachdem die nicht verketteten Werte vom Verbindungsserver zurückgegeben wurden.

Beispiele

A. Verwenden von CONCAT

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

Hier ist das Resultset.

Result
--------------------
Happy Birthday 11/25

B. Verwenden von CONCAT mit NULL-Werten

CREATE TABLE #temp (
    emp_name NVARCHAR(200) NOT NULL,
    emp_middlename NVARCHAR(200) NULL,
    emp_lastname NVARCHAR(200) NOT NULL
    );

INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');

SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;

Hier ist das Resultset.

Result
------------
NameLastname