Mettre à jour la même colonne d’une autre ligne avec SQL Server

Comment mettre à jour la même colonne d’une autre ligne dans une table avec SQL Server ? Vous voulez mettre à jour une donnée qui existe déjà depuis une autre ligne de la même colonne. Il faut identifier cette ligne par une autre clef, une simple requête du type UPDATE MaTable SET MonChamps1 = ‘Valeur’ WHERE MonChampsClef = ‘Ma clef’ ne suffit pas.

Donc, pour mettre à jour le champ avec SQL Server, identifier le tuple contenant l’autre valeur puis récupérer la valeur. Cet article montre comment mettre à jour un champ à partir de la valeur contenue dans une autre ligne, identifiée par une clef.

Mettre à jour la même colonne d’une autre ligne dans une table SQL Server

Créer au préalable la table d’exemple CLIENTS, dont le script est disponible ici : Script de création de la table Clients sous SQL Server

Sélection des données SQL Server avec de mettre à jour la même colonne d'une autre ligne
Selection des données de la table SQL Server avant la mise à jour

Afin de récupérer la valeur du champ nous pouvons nous servir d’une requête de ce type. J’exécute cette requête UPDATE avec une version antérieure de SQL Server, mais elle fonctionnelle sous d’autres versions aussi SQL Server 2012 ou encore SQL Server 2019 :

UPDATE	C1
SET		[VILLE] = C2.[VILLE]
FROM	[dbo].[CLIENTS] C1 , [dbo].[CLIENTS] C2
WHERE	C1.[NOM]	= 'MAMMADOU'
  AND C2.[NOM]	= 'CHRISTOPHE'

-- Vérification des lignes insérées
SELECT * FROM dbo.CLIENTS;

Mettre à jour la même colonne d'une autre ligne avec SQL Server
Mettre à jour la même colonne d’une autre ligne avec SQL Server

La mise à jour de la colonne fonctionne et la ligne cible contient la même valeur que la ligne source.

On note que le client “MAMMADOU” est maintenant rattaché à Paris. Les champs de la table seront accessibles uniquement en utilisant l’alias comme par exemple C1.[VILLE]. Ou encore le nom complet [dbo].[CLIENTS].[VILLE] pour distinguer les deux appels à la même table. Ainsi les règles s’appliquent comme dans une requête SELECT classique.

Soyez le premier à commenter

Laisser un commentaire