SELECT @local_variable (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsSQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Legt eine lokale Variable auf den Wert eines Ausdrucks fest.

Verwenden Sie SET @local_variable zum Zuweisen von Variablen anstelle von SELECT @local_variable.

Transact-SQL-Syntaxkonventionen

Syntax

SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
    [ , ...n ] [ ; ]

Arguments

@local_variable

Eine deklarierte Variable, für die Sie einen Wert zuweisen.

{ } = | += | -= | *= | /= | %= | &= | ^= | |=

Den Wert auf der rechten Seite der Variablen auf der linken Seite zuweisen.

Verbundzuweisungsoperator:

Operator Action
= Weist der Variable den darauf folgenden Ausdruck zu.
+= Addition und Zuweisung
-= Subtraktion und Zuweisung
*= Multiplikation und Zuweisung
/= Division und Zuweisung
%= Modulo und Zuweisung
&= Bitweise AND und Zuweisen
^= Bitweise XOR und Zuweisen
|= Bitweise OR und Zuweisen

expression

Beliebiger gültiger Ausdruck. Dieser Ausdruck enthält eine skalare Unterabfrage.

Remarks

Wird verwendet SELECT @local_variable , um einen einzelnen Wert in die Variable zurückzugeben. Wenn es sich bei expression jedoch um den Namen einer Spalte handelt, können auch mehrere Werte zurückgegeben werden. Wenn die Anweisung mehrere Werte zurückgibt, ruft die SELECT Variable den letzten Wert ab, den die Abfrage zurückgibt.

Wenn die Anweisung keine Zeilen zurückgibt, behält die SELECT Variable den aktuellen Wert bei. Wenn der Ausdruck eine skalare Unterabfrage ist, die keinen Wert zurückgibt, wird die Variable auf NULL.

Eine SELECT Anweisung kann mehrere lokale Variablen initialisieren.

Note

Sie können keine Anweisung verwenden SELECT , die eine Variablezuweisung enthält, um auch typische Abrufvorgänge für Resultset auszuführen.

Examples

Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.

Die Datenbank AdventureWorksLT wird als Beispieldatenbank für Azure SQL-Datenbank verwendet.

A. Verwenden von SELECT @local_variable zum Zurückgeben eines einzelnen Wertes

Im folgenden Beispiel ruft die Variable @var1 den Wert 'Generic Name'ab. Die Abfrage der Tabelle Store gibt keine Zeilen zurück, da der für CustomerID angegebene Wert nicht in der Tabelle enthalten ist. Die Variable behält den Wert "Generic Name" bei.

DECLARE @var1 AS VARCHAR (30);

SELECT @var1 = 'Generic Name';

SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000;

SELECT @var1 AS 'ProductName';

Hier sehen Sie das Ergebnis.

ProductName
------------------------------
Generic Name

B. Verwenden von SELECT @local_variable zum Zurückgeben von NULL

Im folgenden Beispiel weist eine Unterabfrage einen Wert zu @var1. Da der für CustomerID angeforderte Wert nicht vorhanden ist, gibt die Unterabfrage keinen Wert zurück, und die Variable wird auf NULL festgelegt.

DECLARE @var1 AS VARCHAR (30);

SELECT @var1 = 'Generic Name';

SELECT @var1 = (SELECT [Name]
                FROM SalesLT.Product
                WHERE ProductID = 1000000);

SELECT @var1 AS 'Company Name';

Hier sehen Sie das Ergebnis.

Company Name
----------------------------
NULL

C. Antimusterverwendung der rekursiven Variablenzuweisung

Vermeiden Sie das folgende Muster für die rekursive Verwendung von Variablen und Ausdrücken:

SELECT @Var = <expression containing @Var>
FROM
...

In diesem Fall wird nicht garantiert, dass sie @Var auf Zeilenbasis aktualisiert wird. Kann beispielsweise @Var auf den Anfangswert @Var für alle Zeilen festgelegt werden. Dieses Verhalten tritt auf, da die Reihenfolge und Häufigkeit, in der die Zuordnungen verarbeitet werden, nicht unbestimmt ist. Diese Regel gilt für Ausdrücke, die Variablenzeichenfolgenverkettung enthalten, wie im folgenden Beispiel gezeigt, aber auch für Ausdrücke mit Variablen oder Formatvorlagenoperatoren, die keine Zeichenfolgenvariablen oder += Formatvorlagenoperatoren enthalten. Verwenden Sie stattdessen Aggregationsfunktionen für einen setbasierten Vorgang anstelle eines Zeile-für-Zeile-Vorgangs.

Berücksichtigen Sie bei der Zeichenfolgenverkettung die in SQL Server 2017 (14.x) eingeführte STRING_AGG-Funktion für Szenarien, in denen geordnete Zeichenfolgenverkettung gewünscht ist. Weitere Informationen finden Sie unter STRING_AGG.

Das folgende Beispiel zeigt eine Antipattern, die vermieden werden sollen. Die Verwendung ORDER BY in einem Versuch, verkettet zu werden, führt dazu, dass die Liste unvollständig ist:

DECLARE @List AS NVARCHAR (MAX);

SELECT @List = CONCAT(COALESCE (@List + ', ', ''), p.LastName)
FROM Person.Person AS p
WHERE p.FirstName = 'William'
ORDER BY p.BusinessEntityID;

SELECT @List;

Hier sehen Sie das Ergebnis.

(No column name)
---
Walker

Betrachten Sie stattdessen:

DECLARE @List AS NVARCHAR (MAX);

SELECT @List = STRING_AGG(p.LastName, ', ') WITHIN GROUP (ORDER BY p.BusinessEntityID)
FROM Person.Person AS p
WHERE p.FirstName = 'William';

SELECT @List;

Hier sehen Sie das Ergebnis.

(No column name)
---
Vong, Conner, Hapke, Monroe, Richter, Sotelo, Vong, Ngoh, White, Harris, Martin, Thompson, Martinez, Robinson, Clark, Rodriguez, Smith, Johnson, Williams, Jones, Brown, Davis, Miller, Moore, Taylor, Anderson, Thomas, Lewis, Lee, Walker