Microsoft SQL Server
Zmienne
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
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.