Cet article montre comment utiliser T-SQL pour changer une colonne existante en 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 SANS colonne calculée
Commençons par créer une table sans une colonne calculée.
CREATE TABLE Person ( PersonID int IDENTITY (1,1) NOT NULL, FirstName varchar(70), LastName varchar(70), FullName varchar(140) );INSERT INTO Person (FirstName, LastName, FullName)VALUES (' Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer');SELECT *FROM Person;Résultat :
+------------+-------------+------------+------ ----------+| ID de personne | Prénom | Nom | Nom complet ||------------+-------------+------------+------- ---------|| 1 | Homère | Seinfeld | Homer Seinfeld || 2 | Bart | Costance | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------ ----------+Vous pouvez voir que je double lorsque j'insère des données. Le nom complet est une combinaison du prénom et du nom de famille, et je retape ces données pour chaque ligne.
Cela pourrait également entraîner des problèmes lors de la mise à jour de la table. Je devrais me rappeler de mettre à jour deux colonnes chaque fois que quelqu'un changeait son prénom ou son deuxième nom (et trois colonnes s'il changeait les deux).
C'est un bon candidat pour une colonne calculée.
Exemple 2 - Changer la colonne en colonne calculée
Pour transformer une colonne en colonne calculée, vous devez d'abord supprimer la colonne, puis la créer avec la nouvelle définition.
Voici comment changer le
FullName
colonne à une colonne calculée.ALTER TABLE Person DROP COLUMN FullName;ALTER TABLE Person ADD FullName AS (CONCAT(FirstName, ' ', LastName));Nous venons de "changer" la colonne nommée
FullName
à une colonne calculée. Il concatène leFirstName
etLastName
colonnes.Voici ce qui se passe lorsque nous sélectionnons le contenu du tableau :
SÉLECTIONNER *FROM Personne ;Résultat :
+------------+-------------+------------+------ ----------+| ID de personne | Prénom | Nom | Nom complet ||------------+-------------+------------+------- ---------|| 1 | Homère | Seinfeld | Homer Seinfeld || 2 | Bart | Costance | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------ ----------+Exemple 3 - Mettre à jour une valeur
Maintenant, si une valeur est mise à jour dans le
FirstName
ouLastName
colonnes, cela affectera la valeur renvoyée par la colonne calculée. Pas besoin de le mettre à jour en deux colonnes.Exemple :
UPDATE PersonSET LastName ='Bourne'WHERE PersonId =3;SELECT *FROM Person;Résultat :
+------------+-------------+------------+------ ----------+| ID de personne | Prénom | Nom | Nom complet ||------------+-------------+------------+------- ---------|| 1 | Homère | Seinfeld | Homer Seinfeld || 2 | Bart | Costance | Bart Costanza || 3 | Marge | Borne | Marge Bourne |+------------+-------------+------------+------ ----------+