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