Cet article montre comment utiliser T-SQL pour créer une colonne calculée dans SQL Server.
Une colonne calculée est une colonne virtuelle qui utilise une expression pour calculer sa valeur. L'expression utilise généralement des données d'autres colonnes. Une colonne calculée n'est physiquement stockée dans la table que si elle est marquée PERSISTED
.
Exemple 1 - Créer une table avec une colonne calculée
Voici un exemple de création d'un tableau avec une colonne calculée, d'insertion de données, puis de sélection du contenu du tableau.
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price ); INSERT INTO Products (ProductName, Quantity, Price) VALUES ('Hammer', 5, 10), ('Corkscrew', 2, 7.50), ('Kettle', 3, 25.15); SELECT * FROM Products;
Résultat :
+-------------+---------------+------------+---------+--------------+ | ProductID | ProductName | Quantity | Price | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 5 | 10.0000 | 50.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+
Dans ce cas, la dernière colonne est une colonne calculée. Il multiplie la colonne de quantité par la colonne de prix. Cela nous permet d'obtenir une valeur totale du produit actuellement en stock.
Exemple 2 – Créer une colonne calculée persistante
Vous pouvez créer une colonne calculée persistante en ajoutant le PERSISTED
argument. Cela entraînera le stockage physique de la valeur calculée dans la table. Si elle n'est pas persistante, la valeur est calculée chaque fois que vous lisez la colonne calculée.
Voici le même exemple de code que le précédent, sauf que cette fois je crée une colonne calculée persistante :
CREATE TABLE Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName varchar(255), Quantity smallint, Price money, TotalValue AS Quantity * Price PERSISTED );
La seule différence est le PERSISTED
arguments.
Exemple 3 - Mettre à jour une valeur
Maintenant, si une valeur est mise à jour dans la Quantity
ou Price
colonnes, cela affectera la valeur totale renvoyée par la colonne calculée. Cela se produira que la colonne soit persistante ou non.
Si quelqu'un achète un marteau par exemple, cela affectera la valeur totale renvoyée par la colonne calculée :
UPDATE Products SET Quantity = 4 WHERE ProductId = 1; SELECT * FROM Products;
Résultat :
+-------------+---------------+------------+---------+--------------+ | ProductID | ProductName | Quantity | Price | TotalValue | |-------------+---------------+------------+---------+--------------| | 1 | Hammer | 4 | 10.0000 | 40.0000 | | 2 | Corkscrew | 2 | 7.5000 | 15.0000 | | 3 | Kettle | 3 | 25.1500 | 75.4500 | +-------------+---------------+------------+---------+--------------+