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

SQL Server 2008 R2

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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow