Ricerca…


Sintassi

  • DECLARE @VariableName DataType [= Value];
  • SET @VariableName = Value;

Dichiarare una variabile di tabella

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

Quando si crea una tabella normale, si utilizza la sintassi CREATE TABLE Name (Columns) . Quando si crea una variabile di tabella, si utilizza la DECLARE @Name TABLE (Columns) .

Per fare riferimento alla variabile di tabella all'interno di un'istruzione SELECT , SQL Server richiede che si dia un alias alla variabile di tabella, altrimenti si otterrà un errore:

Deve dichiarare la variabile scalare "@TableVariableName".

vale a dire

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

Aggiornamento di una variabile usando SET

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

1

Usando SET , puoi aggiornare solo una variabile alla volta.

Aggiornamento delle variabili usando SELECT

Utilizzando SELECT , è possibile aggiornare più variabili contemporaneamente.

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

1

Ciao


Quando si utilizza SELECT per aggiornare una variabile da una colonna della tabella, se ci sono più valori, utilizzerà l' ultimo valore. (Si applicano le normali regole dell'ordine - se non viene fornito alcun ordinamento, l'ordine non è garantito.)

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

Se non ci sono righe restituite dalla query, il valore della variabile non cambierà:

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

PRINT @Variable

1

Dichiarare più variabili contemporaneamente, con valori iniziali

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

Operatori di assegnazione composti

SQL Server 2008 R2

Operatori composti supportati:

+= Aggiungi e assegna

-= Sottrai e assegna

*= Moltiplica e assegna

/= Dividi e assegna

%= Modulo e assegnare

&= Bitwise AND e assegnare

^= Bit XOR bit e assegnare

|= Bitwise OR e assegnare

Esempio di utilizzo:

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

Aggiornamento delle variabili selezionando da una tabella

A seconda della struttura dei dati, è possibile creare variabili che si aggiornano in modo dinamico.

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)

Nella maggior parte dei casi, è necessario assicurarsi che la query restituisca un solo valore quando si utilizza questo metodo.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow