Published on

November 12, 2020

Utilisation des variables dans SQL Server : Un guide complet

SQL Server permet aux développeurs de stocker, récupérer et manipuler des données à l’aide du langage SQL. Cependant, à mesure que les scripts et les procédures stockées deviennent plus complexes, il peut être difficile de gérer et de manipuler les données sans variables.

Sans variables, les développeurs peuvent être amenés à répéter plusieurs fois des requêtes complexes ou des calculs au sein d’un script, ce qui entraîne un code volumineux et difficile à lire, sujet aux erreurs. De plus, ne pas utiliser de variables peut rendre difficile la gestion efficace des erreurs, car les développeurs peuvent être amenés à répéter plusieurs fois le même code de gestion des erreurs dans un script. Cela peut entraîner un code difficile à maintenir et rendre plus difficile l’identification et la correction des erreurs lorsqu’elles se produisent.

Dans ce tutoriel, nous aborderons le concept d’utilisation des variables dans SQL Server, ainsi que divers exemples pour illustrer leur utilisation.

Déclaration d’une seule variable SQL

La syntaxe T-SQL pour déclarer une variable dans SQL Server est la suivante :

DECLARE @nom_variable type_de_données [= valeur];

Par exemple, déclarons une variable nommée @ProductID de type entier et attribuons-lui une valeur statique de 778 :

DECLARE @ProductID int = 778;

SELECT [SalesOrderID], [CarrierTrackingNumber], [OrderQty], [ProductID], [SpecialOfferID], [UnitPrice], [LineTotal]
FROM [AdventureWorks2019].[Sales].[SalesOrderDetail]
WHERE ProductID = @ProductID;

Vous pouvez également attribuer la valeur ultérieurement à l’aide du mot-clé SET :

DECLARE @ProductID int;

SET @ProductID = 778;

SELECT [SalesOrderID], [CarrierTrackingNumber], [OrderQty], [ProductID], [SpecialOfferID], [UnitPrice], [LineTotal]
FROM [AdventureWorks2019].[Sales].[SalesOrderDetail]
WHERE ProductID = @ProductID;

Vous pouvez utiliser des variables avec différents types de données, tels que des caractères, des dates et des décimales :

DECLARE @employee_name VARCHAR(50);
SET @employee_name = 'Rajendra';

DECLARE @current_date DATE = GETDATE();

DECLARE @tax_rate DECIMAL(4,2);
SET @tax_rate = 0.04;

Déclaration de plusieurs variables SQL Server

Pour déclarer plusieurs variables, vous pouvez utiliser différents mots-clés DECLARE :

DECLARE @Nom varchar(50);
DECLARE @Age tinyint;
DECLARE @DOJ int;

Alternativement, vous pouvez utiliser un seul mot-clé DECLARE et séparer plusieurs variables par une virgule :

DECLARE @Nom varchar(50), @Age tinyint, @DOJ int;

Attribution de valeurs dynamiques aux variables

Vous pouvez définir la valeur d’une variable de manière dynamique. Par exemple, le code suivant déclare trois variables, @AvgUnitPrice, @AvgOrderQty et @AvgLineTotal. L’instruction SELECT calcule le prix unitaire moyen, la quantité de commande moyenne et le total de ligne moyen, et attribue ces valeurs calculées aux variables :

DECLARE @AvgUnitPrice int, @AvgOrderQty int, @AvgLineTotal int;

SELECT @AvgUnitPrice = Avg(UnitPrice), @AvgOrderQty = Avg(OrderQty), @AvgLineTotal = Avg(LineTotal)
FROM [AdventureWorks2019].[Sales].[SalesOrderDetail];

SELECT @AvgUnitPrice as AvgLineTotal, @AvgOrderQty as AvgOrderQty, @AvgLineTotal as AvgLineTotal;

Utilisation des variables dans les procédures stockées

Les variables dans les procédures stockées offrent une flexibilité et un contrôle sur la manipulation des données. Par exemple, la procédure stockée suivante utilise deux variables, @JobTitle et @BirthDate. La procédure stockée attribue des valeurs à ces variables et affiche les informations requises à l’aide de ces variables :

CREATE PROCEDURE dbo.GetPersonInfo
    @NationalIDNumber INT
AS
BEGIN
    DECLARE @JobTitle VARCHAR(50);
    DECLARE @BirthDate date;
 
    SELECT @JobTitle = JobTitle, @BirthDate = BirthDate
    FROM [AdventureWorks2019].[HumanResources].[Employee]
    WHERE [NationalIDNumber] = @NationalIDNumber;
 
    -- Utilisez les variables pour un traitement ultérieur
    PRINT 'Titre du poste : ' + @JobTitle;
    PRINT 'Date de naissance : ' + CAST(@BirthDate AS VARCHAR(10));
END;

EXEC GetPersonInfo 295847284;

Utilisation des variables dans les curseurs

Les variables peuvent être utilisées dans les curseurs pour stocker et manipuler des données. Par exemple, la requête suivante déclare un curseur, SalesOrder_Cursor, et récupère le numéro de commande, le total dû et l’ID du vendeur à partir de la base de données AdventureWorks2019. Le curseur itère à travers les ID de commande, attribue les informations récupérées aux variables @SalesOrderNumber, @TotalDue et @SalesPersonID, et affiche ces informations avec des messages spécifiques :

DECLARE @SalesOrderID int = 71951;
DECLARE @SalesOrderNumber varchar(20);
DECLARE @TotalDue DECIMAL(10, 2);
DECLARE @SalesPersonID varchar(20);

DECLARE SalesOrder_Cursor CURSOR FOR
SELECT SalesOrderNumber, TotalDue, SalesPersonID
FROM [AdventureWorks2019].[Sales].[SalesOrderHeader]
WHERE SalesOrderID >= @SalesOrderID AND SalesPersonID IS NOT NULL;

OPEN SalesOrder_Cursor;

FETCH NEXT FROM SalesOrder_Cursor INTO @SalesOrderNumber, @TotalDue, @SalesPersonID;

WHILE @@FETCH_STATUS = 0
BEGIN
    -- Effectuer des opérations à l'aide des variables
    PRINT 'ID du vendeur : ' + @SalesPersonID;
    PRINT 'Commande : ' + CAST(@SalesOrderNumber AS VARCHAR(10));
    PRINT 'Montant total dû : ' + CAST(@TotalDue AS VARCHAR(10));

    -- Obtenir le prochain ensemble de données du curseur
    FETCH NEXT FROM SalesOrder_Cursor INTO @SalesOrderNumber, @TotalDue, @SalesPersonID;
END;

CLOSE SalesOrder_Cursor;
DEALLOCATE SalesOrder_Cursor;

Utilisation des variables pour créer des instructions SQL dynamiques

Les variables peuvent être utilisées pour créer des instructions SQL dynamiques en combinant plusieurs parties des requêtes, telles que les noms de table, les paramètres et les arguments. Par exemple, le code suivant crée et exécute dynamiquement une instruction SQL à l’aide de la procédure stockée sp_executesql :

DECLARE @table_name VARCHAR(50) = 'SalesOrderHeader';
DECLARE @schema varchar(20) = 'Sales';
DECLARE @SalesOrderID varchar(20) = 71951;
DECLARE @sql_stmt NVARCHAR(MAX);

SET @sql_stmt = 'SELECT * FROM ' + @schema + '.' + QUOTENAME(@table_name) + ' WHERE SalesOrderID =' + @SalesOrderID;

EXEC sp_executesql @sql_stmt;

Utilisation des variables pour contrôler l’exécution d’une boucle

Les variables peuvent aider à contrôler l’exécution des boucles en définissant des conditions, en contrôlant le compteur de boucle et en déterminant quand la boucle doit se poursuivre ou se terminer. Par exemple, le code suivant montre une boucle contenant des informations sur une plage d’ID de commande. La boucle commence à partir de @SalesOrderIDStart et se termine une fois que la valeur de l’ID de commande est égale à @SalesOrderIDEnd. L’instruction SET dans la boucle while incrémente l’ID de commande de 1 :

DECLARE @SalesOrderIDStart INT = 43659, @SalesOrderIDEnd INT = 43759;

WHILE @SalesOrderIDStart <= @SalesOrderIDEnd
BEGIN
    SELECT [AccountNumber], [CustomerID], [SalesPersonID], [TerritoryID], [BillToAddressID], [ShipToAddressID], [ShipMethodID], [CreditCardID], [CreditCardApprovalCode], [TaxAmt], [Freight], [TotalDue]
    FROM [AdventureWorks2019].[Sales].[SalesOrderHeader]
    WHERE SalesOrderID = @SalesOrderIDStart;
    
    SET @SalesOrderIDStart = @SalesOrderIDStart + 1;
END;

Gestion des erreurs à l’aide de variables

La gestion des erreurs est nécessaire pour capturer les erreurs lors de l’exécution du code. Par exemple, si vous avez défini une clé primaire sur la colonne ID et que quelqu’un essaie d’insérer une valeur en double, cela entraînerait une violation de la clé primaire. Le code suivant utilise le bloc TRY CATCH pour capturer l’erreur due à la violation de la clé primaire. Le bloc CATCH attribue le message d’erreur à la variable @ErrorMessage et affiche le message :

CREATE TABLE Employee
(
   ID int PRIMARY KEY,
   First_name varchar(50),
   Country varchar(20)
);

BEGIN TRY
    INSERT INTO Employee Values(1, 'Rajendra', 'India');

    -- Insertion d'un enregistrement en double qui générera une erreur de CLÉ PRIMAIRE
    INSERT INTO Employee Values(1, 'Rajendra', 'India');
END TRY

BEGIN CATCH
    -- Déclarer des variables pour stocker les informations sur l'erreur
    DECLARE @ErrorMessage NVARCHAR(MAX);
    SELECT @ErrorMessage = ERROR_MESSAGE();
    PRINT 'Une erreur s'est produite : ' + @ErrorMessage; 
END CATCH;

En utilisant des variables, vous pouvez gérer efficacement les erreurs et fournir des messages d’erreur appropriés.

Conclusion

La déclaration de variables dans SQL Server permet aux développeurs de stocker et de manipuler des données lors de l’exécution d’un script ou d’une procédure stockée. Les variables sont utiles pour conserver des ensembles de résultats intermédiaires, contrôler le flux de travail, préparer des instructions SQL dynamiques et gérer les erreurs. En utilisant efficacement les variables, les développeurs peuvent écrire un code plus efficace et plus facile à maintenir.

Article mis à jour pour la dernière fois le : 2023-08-16

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.