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 champs à partir de la valeur contenue dans une autre ligne, identifiée par une clef.

Mettre à jour le même champs d’une autre ligne dans la même table avec 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

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 avec SQL Server 2008 R2, mais fonctionnelle sous d’autres versions aussi (SQL Server 2012) :

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;


La mise à jour fonctionne et la ligne 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