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

Vous voulez mettre à jour une donnée qui existe déjà depuis une autre ligne de la même colonne. Comment mettre à jour la même colonne d’une autre ligne dans une table avec SQL Server ? Il faut identifier cette ligne par une autre clef, une simple requête de ce type ne suffit pas. En effet cette requête met à jour toutes les lignes avec cette clef.

-- Cette requête ne fonctionne pas car c'est une simple mise à jour SQL
UPDATE MaTable 
SET MonChamps1 = 'Valeur' 
WHERE MonChampsClef = 'Ma clef'

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

La requête MS SQL de mise à jour est une jointure

Afin de récupérer la valeur du champ et de mettre à jour la colonne, se servir d’une requête de ce type. Exécuter cette requête UPDATE avec la version SQL Server 2016, mais elle fonctionnelle sous d’autres versions, comme SQL Server 2012 ou encore SQL Server 2019.

-- Mettre à jour la table des clients
-- depuis la même colonne d'une ligne différente
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

Mettre à jour la colonne de la ligne cible depuis 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.

Ce tutoriel sur la requête SQL Update explique comment, avec une jointure simple il est possible de récupérer la valeur d’une ligne. Puis comment utiliser cette valeur pour mettre à jour la même colonne mais cette fois d’une ligne cible.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*