Szukaj…


Składnia

  • DECLARE @VariableName DataType [= wartość];
  • SET @VariableName = wartość;

Zadeklaruj zmienną tabelową

DECLARE @Employees TABLE
(
    EmployeeID INT NOT NULL PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    ManagerID INT NULL
)

Podczas tworzenia normalnej tabeli używasz składni CREATE TABLE Name (Columns) . Podczas tworzenia zmiennej tabeli korzystasz ze DECLARE @Name TABLE (Columns) .

Aby odwołać się do zmiennej tabeli w instrukcji SELECT , SQL Server wymaga podania aliasowi tabeli zmiennej, w przeciwnym razie wystąpi błąd:

Należy zadeklarować zmienną skalarną „@TableVariableName”.

to znaczy

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

Aktualizacja zmiennej za pomocą SET

DECLARE @VariableName INT
SET @VariableName = 1
PRINT @VariableName

1

Za pomocą SET możesz aktualizować tylko jedną zmienną na raz.

Aktualizacja zmiennych za pomocą SELECT

Za pomocą SELECT możesz aktualizować wiele zmiennych jednocześnie.

DECLARE @Variable1 INT, @Variable2 VARCHAR(10)
SELECT @Variable1 = 1, @Variable2 = 'Hello'
PRINT @Variable1
PRINT @Variable2

1

Witaj


Jeśli używasz SELECT do aktualizacji zmiennej z kolumny tabeli, jeśli istnieje wiele wartości, użyje ostatniej wartości. (Obowiązują normalne zasady zamówień - jeśli nie podano żadnego rodzaju, zamówienie nie jest gwarantowane).

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

Jeśli zapytanie nie zwróci żadnych wierszy, wartość zmiennej się nie zmieni:

SELECT TOP 0 @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

1

Deklaruj wiele zmiennych jednocześnie, z wartościami początkowymi

DECLARE 
  @Var1 INT = 5, 
  @Var2 NVARCHAR(50) = N'Hello World', 
  @Var3 DATETIME = GETDATE()

Operatory przypisania złożonego

SQL Server 2008 R2

Obsługiwane operatory złożone:

+= Dodaj i przypisz

-= Odejmij i przypisz

*= Pomnóż i przypisz

/= Podziel i przypisz

%= Modulo i przypisanie

&= Bitowe AND i przypisz

^= Bitowe XOR i przypisanie

|= Bitowe OR i przypisz

Przykładowe użycie:

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

Aktualizacja zmiennych poprzez wybranie z tabeli

W zależności od struktury danych możesz tworzyć zmienne, które aktualizują się dynamicznie.

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)

W większości przypadków należy upewnić się, że zapytanie zwraca tylko jedną wartość podczas korzystania z tej metody.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow