Recherche…


Syntaxe

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

Déclarez une variable de table

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

Lorsque vous créez une table normale, vous utilisez la syntaxe CREATE TABLE Name (Columns) . Lors de la création d'une variable de table, vous utilisez la DECLARE @Name TABLE (Columns) .

Pour référencer la variable de table dans une SELECT , SQL Server exige que vous donniez à la variable de table un alias, sinon vous obtenez une erreur:

Doit déclarer la variable scalaire "@TableVariableName".

c'est à 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

Mise à jour d'une variable à l'aide de SET

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

1

En utilisant SET , vous ne pouvez mettre à jour qu'une seule variable à la fois.

Mise à jour des variables à l'aide de SELECT

En utilisant SELECT , vous pouvez mettre à jour plusieurs variables à la fois.

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

1

Bonjour


Lorsque vous utilisez SELECT pour mettre à jour une variable à partir d'une colonne de table, s'il existe plusieurs valeurs, il utilisera la dernière valeur. (Les règles d’ordre normal s’appliquent - si aucun tri n’est donné, la commande n’est pas garantie).

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

Si la requête ne renvoie aucune ligne, la valeur de la variable ne changera pas:

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

PRINT @Variable

1

Déclarez plusieurs variables à la fois, avec des valeurs initiales

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

Opérateurs d'affectation composés

SQL Server 2008 R2

Opérateurs composés pris en charge:

+= Ajouter et assigner

-= Soustraire et attribuer

*= Multiplier et assigner

/= Diviser et assigner

%= Modulo et assign

&= Bitwise AND et assigner

^= Bit à bit XOR et assigner

|= OU bit à bit et attribuer

Exemple d'utilisation:

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

Mettre à jour les variables en les sélectionnant dans une table

Selon la structure de vos données, vous pouvez créer des variables qui se mettent à jour dynamiquement.

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)

Dans la plupart des cas, vous souhaiterez vous assurer que votre requête ne renvoie qu'une valeur lorsque vous utilisez cette méthode.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow