Microsoft SQL Server
variabler
Sök…
Syntax
- DECLARE @VariableName DataType [= Value];
- SET @VariableName = Värde;
Förklara en tabellvariabel
DECLARE @Employees TABLE
(
EmployeeID INT NOT NULL PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
ManagerID INT NULL
)
När du skapar en normal tabell använder du CREATE TABLE Name (Columns)
. När du skapar en DECLARE @Name TABLE (Columns)
använder DECLARE @Name TABLE (Columns)
.
För att hänvisa till tabellvariabeln i ett SELECT
uttalande kräver SQL Server att du ger tabellvariabeln ett alias, annars får du ett fel:
Måste deklarera den skalära variabeln "@TableVariableName".
dvs.
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
Uppdatera en variabel med SET
DECLARE @VariableName INT
SET @VariableName = 1
PRINT @VariableName
1
Med SET
kan du bara uppdatera en variabel åt gången.
Uppdatera variabler med SELECT
Med SELECT
kan du uppdatera flera variabler samtidigt.
DECLARE @Variable1 INT, @Variable2 VARCHAR(10)
SELECT @Variable1 = 1, @Variable2 = 'Hello'
PRINT @Variable1
PRINT @Variable2
1
Hej
När du använder SELECT
att uppdatera en variabel från en tabellkolumn, om det finns flera värden, kommer den att använda det sista värdet. (Normala beställningsregler gäller - om ingen sortering ges, är beställningen inte garanterad.)
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
Om det inte finns några rader som returneras av frågan ändras inte variabelns värde:
SELECT TOP 0 @Variable = Example
FROM #Test
ORDER BY Example ASC
PRINT @Variable
1
Förklara flera variabler samtidigt med initialvärden
DECLARE
@Var1 INT = 5,
@Var2 NVARCHAR(50) = N'Hello World',
@Var3 DATETIME = GETDATE()
Operatörer för sammansatt tilldelning
Stödda sammansatta operatörer:
+=
Lägg till och tilldela
-=
Subtrahera och tilldela
*=
Multiplicera och tilldela
/=
Dela upp och tilldela
%=
Modulo och tilldela
&=
Bitvis OCH och tilldela
^=
Bitvis XOR och tilldela
|=
Bitvis ELLER och tilldela
Exempel på användning:
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
Uppdatera variabler genom att välja från en tabell
Beroende på strukturen för dina data kan du skapa variabler som uppdateras dynamiskt.
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)
I de flesta fall vill du se till att din fråga bara returnerar ett värde när du använder den här metoden.