SQL-Variablen: SQL Server – Deklarieren, Festlegen und Auswählen von Variablen

⚡ Intelligente Zusammenfassung

SQL-Server-Variablen sind benannte Objekte, die als Platzhalter für einen einzelnen Datenwert im Speicher dienen. Eine Variable muss mit der DECLARE-Anweisung deklariert werden, bevor ihr ein Wert zugewiesen und sie wiederverwendet werden kann.

  • 📦 Definition: Eine SQL-Server-Variable speichert einen Wert und dient als Platzhalter für eine Speicheradresse.
  • ???? Lokal und global: SQL Server unterstützt lokale Variablen mit dem Präfix @, die vom Benutzer deklariert werden, sowie vom System verwaltete globale Variablen mit dem Präfix @@.
  • 📝 ERKLÄREN: Die DECLARE-Anweisung erzeugt eine Variable und initialisiert sie standardmäßig mit NULL.
  • 🔀 Drei Zuweisungsmethoden: Ein Wert kann während der DECLARE-Anweisung, mit SET oder mit SELECT zugewiesen werden.
  • 🔎 Skalare Unterabfragen: SET und SELECT können beide einen einzelnen Wert aus einer Abfrage in eine Variable einlesen.
  • 🧠 SET versus SELECT: SET weist einer Variablen eine Variable zu und folgt dem ANSI-Standard, während SELECT mehrere Variablen gleichzeitig zuweisen kann.

SQL Server-Variablen: DECLARE, SET und SELECT

Was ist eine Variable in SQL Server?

In MS SQL ServerVariablen sind Objekte, die als Platzhalter für eine Speicheradresse dienen. Eine Variable speichert einen einzelnen Datenwert, der innerhalb eines Batches oder einer Prozedur gelesen und wiederverwendet werden kann.

Variablentypen in SQL: Lokal, Global

MS SQL Server kennt zwei Arten von Variablen:

  • Lokale Variable
  • Globale Variable

Ein Benutzer kann jedoch nur eine lokale Variable erstellen. Die folgende Abbildung erläutert die beiden in MS SQL Server verfügbaren Variablentypen.

Diagramm der beiden Variablentypen in SQL Server: lokale Variablen und globale Variablen

Lokale Variable

  • Ein Benutzer deklariert die lokale Variable.
  • Standardmäßig beginnt der Name einer lokalen Variable mit @.
  • Jede lokale Variable ist auf den aktuellen Batch oder die aktuelle Prozedur innerhalb einer gegebenen Sitzung beschränkt.

Globale Variable

  • Das System verwaltet die globale Variable; ein Benutzer kann keine eigene Variable deklarieren.
  • Ein globaler Variablenname beginnt mit @@.
  • Es speichert sitzungsbezogene Informationen.

So deklarieren Sie eine Variable in SQL

Bevor Sie eine Variable in einem Batch oder einer Prozedur verwenden SQLSie müssen sie deklarieren. Der Befehl DECLARE erstellt eine Variable, die als Platzhalter für eine Speicheradresse dient. Erst nach der Deklaration kann die Variable im nachfolgenden Teil des Batches oder der Prozedur verwendet werden.

TSQL-Syntax:

DECLARE  { @LOCAL_VARIABLE[AS] data_type  [ = value ] }

Regeln:

  • Die Initialisierung ist bei der Deklaration optional.
  • Standardmäßig initialisiert DECLARE die Variable mit NULL.
  • Die Verwendung des Schlüsselworts „AS“ ist optional.
  • Um mehr als eine lokale Variable zu deklarieren, fügen Sie nach der ersten Definition ein Komma ein und geben Sie dann den Namen der nächsten Variable an. Datentyp.

Beispiele für die Deklaration einer Variablen

Abfrage: Mit 'AS'

DECLARE @COURSE_ID AS INT;

Abfrage: Ohne 'AS'

DECLARE @COURSE_NAME VARCHAR (10);

Abfrage: DECLARE zwei Variablen

DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);

Zuweisen eines Werts zur SQL-Variablen

Einer Variablen kann auf drei Arten ein Wert zugewiesen werden:

  • Bei der Variablendeklaration mit dem Schlüsselwort DECLARE.
  • Verwendung von SET.
  • Verwendung von SELECT.

Lassen Sie uns alle drei Wege im Detail betrachten.

Während der Variablendeklaration mit dem Schlüsselwort DECLARE

T-SQL-Syntax:

DECLARE { @Local_Variable [AS] Datatype [ = value ] }

Hier können Sie nach dem Datentyp ein '=' gefolgt vom zuzuweisenden Wert verwenden.

Abfrage:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Die Ausführung der Abfrage gibt den bei der Deklaration zugewiesenen Wert aus, wie unten dargestellt.

Ausgabe einer während der DECLARE-Anweisung zugewiesenen Variable; Ausgabe des Wertes 5

Verwendung von SQL-SET-Variablen

Manchmal ist es sinnvoll, Deklaration und Initialisierung zu trennen. Mit `SET` wird einer Variablen nach ihrer Deklaration ein Wert zugewiesen. Im Folgenden werden die verschiedenen Möglichkeiten zur Wertzuweisung mit `SET` beschrieben.

Beispiel: Zuweisen eines Wertes zu einer Variablen mithilfe von SET

Syntax:

DECLARE @Local_Variable <Data_Type>
SET @Local_Variable =  <Value>

Abfrage:

DECLARE @COURSE_ID AS INT
SET @COURSE_ID = 5
PRINT @COURSE_ID

Die Ausführung des Skripts gibt den mit SET zugewiesenen Wert zurück, wie unten dargestellt.

Ausgabe der Wertzuweisung an eine Variable mit SET, Ausgabe: 5

Beispiel: Mehreren Variablen mit SET einen Wert zuweisen

Syntax:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>,
SET @Local_Variable_1 = <Value_1>
SET @Local_Variable_2 = <Value_2>

Regel: Mit dem Schlüsselwort SET kann nur einer einzigen Variablen ein Wert zugewiesen werden.

Abfrage:

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SET @COURSE_ID = 5
SET @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Die beiden PRINT-Anweisungen geben beide zugewiesenen Werte zurück, wie unten dargestellt.

Ausgabe der Zuweisung zweier Variablen mit SET, Ausgabe von 5 und UNIX

Beispiel: Zuweisen eines Wertes zu einer Variablen mithilfe einer skalaren Unterabfrage und SET

Syntax:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)

Regeln:

  • Setzen Sie die Abfrage in Klammern.
  • Die Abfrage sollte eine skalare Abfrage sein, d. h. sie sollte genau eine Zeile und eine Spalte zurückgeben. Andernfalls führt die Abfrage zu einem Fehler.
  • Wenn die Abfrage null Zeilen zurückgibt, wird die Variable auf EMPTY, also NULL, gesetzt.

Angenommen, wir haben die Tabelle genannt 'Guru99' mit zwei Spalten, wie unten dargestellt. Diese Tabelle wird in den folgenden Beispielen verwendet.

GuruTabelle 99 mit den Spalten Tutorial_ID und Tutorial_name, die in den Beispielen verwendet werden

Beispiel 1: Wenn die Unterabfrage eine Zeile als Ergebnis zurückgibt

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

Da die Unterabfrage genau eine übereinstimmende Zeile zurückgibt, erhält die Variable diesen Wert, wie unten dargestellt.

Ausgabe einer skalaren Unterabfrage mit SET-Anweisung, die den übereinstimmenden Tutorialnamen ausgibt.

Beispiel 2: Wenn die Unterabfrage null Zeilen als Ergebnis zurückgibt

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Da die Unterabfrage keine Zeilen zurückgibt, ist der Wert der Variablen LEER, also NULL, sodass nichts ausgegeben wird, wie unten gezeigt.

Ausgabe einer skalaren SET-Unterabfrage, die keine Zeilen zurückgibt und die Variable NULL zurücklässt.

Verwendung der SQL-SELECT-Variable

Genau wie bei SET können Sie auch SELECT verwenden, um Variablen Werte zuzuweisen, nachdem Sie sie mit DECLARE deklariert haben. Im Folgenden finden Sie verschiedene Möglichkeiten, mit SELECT einen Wert zuzuweisen.

Beispiel: Zuweisen eines Wertes zu einer Variablen mithilfe von SELECT

Syntax:

DECLARE @LOCAL_VARIABLE <Data_Type>
SELECT @LOCAL_VARIABLE = <Value>

Abfrage:

DECLARE @COURSE_ID INT
SELECT @COURSE_ID = 5
PRINT @COURSE_ID

Die SELECT-Anweisung gibt den Wert wie unten gezeigt aus.

Ausgabe der Wertzuweisung an eine Variable mit SELECT, Ausgabe: 5

Beispiel: Mehreren Variablen mit SELECT einen Wert zuweisen

Syntax:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>,  @Local_Variable _2 = <Value_2>

Regel: Im Gegensatz zu SET kann SELECT mehreren, durch Kommas getrennten Variablen einen Wert zuweisen.

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Beide Variablen werden in einer einzigen SELECT-Anweisung zugewiesen, wie unten gezeigt.

Ausgabe der Zuweisung zweier Variablen mit einem einzigen SELECT-Befehl, Ausgabe von 5 und UNIX

Beispiel: Zuweisen eines Wertes zu einer Variablen mithilfe einer Unterabfrage mit SELECT

Syntax:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)

Regeln:

  • Setzen Sie die Abfrage in Klammern.
  • Die Abfrage sollte eine skalare Abfrage sein, die eine Zeile und eine Spalte zurückgibt. Andernfalls wird ein Fehler ausgelöst.
  • Wenn die Abfrage null Zeilen zurückgibt, dann ist die Variable LEER, also NULL.

Überdenken Sie unsere 'Guru99'-Tisch.

Beispiel 1: Wenn die Unterabfrage eine Zeile als Ergebnis zurückgibt

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1)
PRINT @COURSE_NAME

Die Unterabfrage gibt eine Zeile zurück, daher enthält die Variable diesen Wert, wie unten gezeigt.

Ausgabe einer mit SELECT zugewiesenen skalaren Unterabfrage, die den übereinstimmenden Tutorialnamen ausgibt.

Beispiel 2: Wenn die Unterabfrage null Zeilen als Ergebnis zurückgibt

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Wenn keine passende Zeile gefunden wird, bleibt die Variable LEER, also NULL, wie unten dargestellt.

Ausgabe einer SELECT-Skalar-Unterabfrage, die keine Zeilen zurückgibt und die Variable NULL zurückgibt.

Beispiel 3: Einer Variablen mit einer regulären SELECT-Anweisung einen Wert zuweisen

Syntax:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>

Regeln:

  • Im Gegensatz zu SET wird bei einer Abfrage, die mehrere Zeilen zurückgibt, der Wert der Variablen auf den Wert der letzten Zeile gesetzt.
  • Wenn die Abfrage null Zeilen zurückgibt, wird die Variable auf EMPTY, also NULL, gesetzt.

Abfrage 1: Die Abfrage gibt eine Zeile zurück.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3
PRINT @COURSE_NAME

Die einzelne übereinstimmende Zeile legt den Variablenwert fest, wie unten dargestellt.

Ausgabe einer regulären SELECT-Anweisung, die eine Zeile zurückgibt

Abfrage 2: Die Abfrage gibt mehrere Zeilen zurück.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

Wenn mehrere Zeilen übereinstimmen, behält die Variable den Wert aus der letzten Zeile bei, wie unten dargestellt.

Ausgabe einer regulären SELECT-Anweisung, die mehrere Zeilen zurückgibt, keeping der Wert der letzten Zeile

Abfrage 3: Die Abfrage liefert null Zeilen.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

Wenn keine Zeilen übereinstimmen, ist die Variable LEER, also NULL, wie unten dargestellt.

Die Ausgabe einer regulären SELECT-Anweisung, die keine Zeilen zurückgibt, lässt die Variable NULL.

Weitere Beispiele für SQL-Variablen

Eine deklarierte Variable kann auch innerhalb einer Abfrage verwendet werden, beispielsweise in einer WHERE-Klausel zum Filtern von Zeilen.

Abfrage:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

Die Variable filtert die Abfrage und gibt die übereinstimmende Zeile zurück, wie unten dargestellt.

Ausgabe der Verwendung einer Variablen in einer WHERE-Klausel zum Filtern der Guru99 Tisch

Interessante Fakten über SQL Server-Variablen!

  • Eine lokale Variable kann sowohl mit dem Befehl PRINT als auch mit dem Befehl SELECT angezeigt werden.
  • Der Tabellendatentyp erlaubt die Verwendung von 'AS' bei der Deklaration nicht.
  • SET entspricht den ANSI-Standards, SELECT hingegen nicht.
  • Es ist auch zulässig, eine lokale Variable mit dem Namen @ zu erstellen. Sie kann beispielsweise wie folgt deklariert werden:
'DECLARE @@ as VARCHAR (10)'

Häufig gestellte Fragen

Wird DECLARE ohne Zuweisung ausgeführt, enthält eine SQL-Server-Variable den Wert NULL. Die Variable existiert zwar, hat aber keinen Wert, bis ihr mit DECLARE und den Parametern =, SET oder SELECT ein Wert zugewiesen wird. Der Zugriff auf die Variable vor der Zuweisung liefert einfach NULL.

Wenn die Unterabfrage keine Zeilen zurückgibt, weist SET den Wert NULL zu und überschreibt den aktuellen Wert. SELECT hingegen lässt die Variable unverändert.ping Welchen Wert die Variable auch immer zuvor hatte. Dieser Unterschied ist relevant, wenn die Variable zu Beginn einen Wert ungleich NULL hatte.

Eine Tabellenvariable, deklariert mit DECLARE @t TABLE(…), speichert ein kleines Ergebnis-Set, das auf einen Batch beschränkt ist. Im Gegensatz zu einer temporären Tabelle existiert sie nur innerhalb ihres Batches, kann nach ihrer Erstellung nicht mehr geändert werden und eignet sich häufig für kleine Datensätze.

Eine lokale Variable ist auf den Batch, die gespeicherte Prozedur oder den Trigger beschränkt, in dem sie deklariert wurde, und zwar innerhalb einer Sitzung. Das Schlüsselwort GO beendet einen Batch, sodass eine Variable, die vor GO deklariert wurde, danach nicht mehr referenziert werden kann.

Eine Variable kann nahezu jeden SQL Server verwenden. DatentypZu den unterstützten Datentypen gehören int, decimal, varchar, nvarchar, date, datetime, bit und table. Ordnen Sie die Variable der Spalte zu, die sie repräsentiert, um implizite Konvertierungsfehler zu vermeiden.

Weisen Sie der Variablen mit SET ihren eigenen Wert zu, zum Beispiel SET @counter = @counter + 1. SELECT funktioniert ebenfalls: SELECT @total = @total + price. Dieses Muster dient zur Verwendung in Schleifen und zur Berechnung von kumulierten Summen in Skripten und gespeicherten Prozeduren.

Ja. GitHub-Copilot Es kann DECLARE-, SET- und SELECT-Anweisungen aus natürlichsprachlichen Kommentaren generieren und geeignete Datentypen vorschlagen. Überprüfen Sie die generierten Namen, Typen und Zuweisungslogik immer anhand Ihres Schemas, bevor Sie es in der Produktion einsetzen.

KI- und maschinelle Lernassistenten tracSie analysieren, wie Variablen Werte empfangen und weitergeben, kennzeichnen nicht initialisierte oder falsch typisierte Variablen und schlagen mengenbasierte Umstrukturierungen vor, die langsame, variablengesteuerte Schleifen ersetzen. Der Entwickler prüft weiterhin jede Änderung anhand der tatsächlichen Daten und der aktuellen Arbeitslast.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: