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

SQL Server 2008 R2

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow