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

Comment mettre à jour la même colonne de la même table sur une autre ligne avec SQL Server ?

Exemple de code pour mettre à jour la même colonne SQL Server sur une autre ligne depuis une autre ligne, sur la même table. Il faut identifier cette ligne par une autre clef, une simple requête UPDATE de ce type ne suffit pas. En effet cette requête met à jour toutes les lignes avec cette clef.

Une requête simple met à jour toutes les lignes

En effet, une requête de MAJ avec une commande UPDATE ne suffit pas, car elle met à jour toutes les lignes identifiées par la clef, avec la valeur cible.

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

Créer au préalable la table pour la MAJ

Créer au préalable la table d’exemple, des CLIENTS, dont le script est disponible sur ce tutoriel, créer 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

Mettre à jour la même colonne sur une autre ligne MS SQL

Afin de récupérer la valeur du champ et de mettre à jour la colonne, se servir d’une requête de ce type. C’est à dire qu’il faut utiliser 2 fois la même table avec 2 alias différents:

  • Clients C1 : l’alias de la table à mettre à jour
  • Clients C2 : l’alias de la même table pour lire la valeur source

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 sur une autre ligne avec SQL Server
Mettre à jour la même colonne sur une autre ligne avec SQL Server

On note que le client MAMMADOU est maintenant rattaché à Paris. Dans une requête avec des alias et des jointures, les champs de la table sont 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 SQL classique avec une jointure.

Requêtes SELECT SQL Server pour sélectionner et filtrer

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *