Microsoft SQL Server
Variablen
Suche…
Syntax
- DECLARE @VariableName DataType [= Wert];
- SET @VariableName = Wert;
Deklarieren Sie eine Tabellenvariable
DECLARE @Employees TABLE
(
EmployeeID INT NOT NULL PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
ManagerID INT NULL
)
Wenn Sie eine normale Tabelle erstellen, verwenden Sie die Syntax CREATE TABLE Name (Columns)
. Beim Erstellen einer Tabellenvariablen verwenden Sie die Syntax DECLARE @Name TABLE (Columns)
.
Um auf die Tabellenvariable innerhalb einer SELECT
Anweisung zu verweisen, müssen Sie in SQL Server einen Alias für die Tabellenvariable angeben. Andernfalls erhalten Sie eine Fehlermeldung:
Muss die Skalarvariable "@TableVariableName" deklarieren.
dh
DECLARE @Table1 TABLE (Example INT)
DECLARE @Table2 TABLE (Example INT)
/*
-- the following two commented out statements would generate an error:
SELECT *
FROM @Table1
INNER JOIN @Table2 ON @Table1.Example = @Table2.Example
SELECT *
FROM @Table1
WHERE @Table1.Example = 1
*/
-- but these work fine:
SELECT *
FROM @Table1 T1
INNER JOIN @Table2 T2 ON T1.Example = T2.Example
SELECT *
FROM @Table1 Table1
WHERE Table1.Example = 1
Eine Variable mit SET aktualisieren
DECLARE @VariableName INT
SET @VariableName = 1
PRINT @VariableName
1
Mit SET
können Sie jeweils nur eine Variable aktualisieren.
Variablen mit SELECT aktualisieren
Mit SELECT
können Sie mehrere Variablen gleichzeitig aktualisieren.
DECLARE @Variable1 INT, @Variable2 VARCHAR(10)
SELECT @Variable1 = 1, @Variable2 = 'Hello'
PRINT @Variable1
PRINT @Variable2
1
Hallo
Bei der Verwendung von SELECT
zum Aktualisieren einer Variablen aus einer Tabellenspalte wird bei mehreren Werten der letzte Wert verwendet. (Es gelten die normalen Bestellregeln. Wenn keine Sortierung angegeben wird, ist die Bestellung nicht garantiert.)
CREATE TABLE #Test (Example INT)
INSERT INTO #Test VALUES (1), (2)
DECLARE @Variable INT
SELECT @Variable = Example
FROM #Test
ORDER BY Example ASC
PRINT @Variable
2
SELECT TOP 1 @Variable = Example
FROM #Test
ORDER BY Example ASC
PRINT @Variable
1
Wenn von der Abfrage keine Zeilen zurückgegeben werden, ändert sich der Wert der Variablen nicht:
SELECT TOP 0 @Variable = Example
FROM #Test
ORDER BY Example ASC
PRINT @Variable
1
Mehrere Variablen gleichzeitig mit Anfangswerten deklarieren
DECLARE
@Var1 INT = 5,
@Var2 NVARCHAR(50) = N'Hello World',
@Var3 DATETIME = GETDATE()
Zusammengesetzte Zuweisungsoperatoren
Unterstützte Verbundoperatoren:
+=
Hinzufügen und Zuweisen
-=
Subtrahieren und zuweisen
*=
Multiplizieren und zuweisen
/=
Teilen und zuweisen
%=
Modulo und zuweisen
&=
Bitweises UND und Zuweisen
^=
Bitweises XOR und zuweisen
|=
Bitweises ODER und zuweisen
Verwendungsbeispiel:
DECLARE @test INT = 42;
SET @test += 1;
PRINT @test; --43
SET @test -= 1;
PRINT @test; --42
SET @test *= 2
PRINT @test; --84
SET @test /= 2;
PRINT @test; --42
Aktualisieren von Variablen durch Auswahl aus einer Tabelle
Abhängig von der Struktur Ihrer Daten können Sie Variablen erstellen, die dynamisch aktualisiert werden.
DECLARE @CurrentID int = (SELECT TOP 1 ID FROM Table ORDER BY CreateDate desc)
DECLARE @Year int = 2014
DECLARE @CurrentID int = (SELECT ID FROM Table WHERE Year = @Year)
In den meisten Fällen sollten Sie sicherstellen, dass Ihre Abfrage bei Verwendung dieser Methode nur einen Wert zurückgibt.