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




Si vous voulez mettre à jour un champs qui existe déjà depuis un autre champs d’une même table n’étant pas identifié par une autre clef, une simple requête du type UPDATE MaTable SET MonChamps1 = ‘Valeur’ WHERE MonChampsClef = ‘Ma clef’ ne sera pas suffisante. En d’autres termes, pour mettre à jour le champs en SQL, il vous faudra identifier le tuple contenant l’autre valeur puis récupérer la valeur. Cet article vous montrera comment faire pour mettre à jour un champs à partir de la valeur contenue dans une autre ligne étant identifiée par une clef composée.

 

Comment 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 champs nous pouvons nous servir d’une requête de ce type qui a testée sous SQL Server 2008, mais fonctionnelle sous d’autres versions aussi (SQL Server 20102) :

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;

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 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.