Published on

May 31, 2010

Pourquoi vous devriez utiliser l’opération MERGE dans SQL Server

Vous êtes-vous déjà retrouvé à écrire des instructions séparées pour INSÉRER, METTRE À JOUR ou SUPPRIMER des données en fonction de certaines conditions dans SQL Server ? Si c’est le cas, alors vous devez connaître l’opération MERGE. Dans cet article de blog, nous explorerons la nécessité d’utiliser l’opération MERGE et comment elle peut simplifier vos tâches de manipulation de données.

L’opération MERGE est une nouvelle fonctionnalité de SQL Server qui offre un moyen efficace d’effectuer plusieurs opérations DML (Data Manipulation Language). Dans les versions précédentes de SQL Server, les développeurs devaient écrire des instructions séparées pour chaque opération de manipulation de données. Cependant, avec l’instruction MERGE, vous pouvez inclure la logique de ces modifications de données dans une seule instruction.

Un des avantages les plus importants de l’instruction MERGE est qu’elle lit et traite l’ensemble des données une seule fois. Dans les versions précédentes, vous deviez écrire trois instructions différentes pour traiter trois activités différentes (INSÉRER, METTRE À JOUR ou SUPPRIMER). Mais avec l’instruction MERGE, toutes les activités de mise à jour peuvent être effectuées en un seul passage des tables de la base de données.

Jetons un coup d’œil à un exemple pour comprendre comment fonctionne l’opération MERGE :

USE tempdb
GO

CREATE TABLE StudentDetails
(
StudentID INTEGER PRIMARY KEY,
StudentName VARCHAR(15)
)
GO

INSERT INTO StudentDetails
VALUES(1,'SMITH')
INSERT INTO StudentDetails
VALUES(2,'ALLEN')
INSERT INTO StudentDetails
VALUES(3,'JONES')
INSERT INTO StudentDetails
VALUES(4,'MARTIN')
INSERT INTO StudentDetails
VALUES(5,'JAMES')
GO

CREATE TABLE StudentTotalMarks
(
StudentID INTEGER REFERENCES StudentDetails,
StudentMarks INTEGER
)
GO

INSERT INTO StudentTotalMarks
VALUES(1,230)
INSERT INTO StudentTotalMarks
VALUES(2,255)
INSERT INTO StudentTotalMarks
VALUES(3,200)
GO

-- Instruction MERGE
MERGE StudentTotalMarks AS stm
USING (SELECT StudentID, StudentName FROM StudentDetails) AS sd
ON stm.StudentID = sd.StudentID
WHEN MATCHED AND stm.StudentMarks > 250 THEN DELETE
WHEN MATCHED THEN UPDATE SET stm.StudentMarks = stm.StudentMarks + 25
WHEN NOT MATCHED THEN
INSERT(StudentID, StudentMarks)
VALUES(sd.StudentID, 25);
GO

-- Sélectionner depuis la table
SELECT *
FROM StudentDetails
GO
SELECT *
FROM StudentTotalMarks
GO

-- Nettoyer
DROP TABLE StudentDetails
GO
DROP TABLE StudentTotalMarks
GO

Dans cet exemple, nous avons deux tables : StudentDetails et StudentTotalMarks. L’instruction MERGE est utilisée pour mettre à jour la table StudentTotalMarks en fonction des conditions spécifiées. Elle vérifie si StudentMarks est supérieur à 250, et si c’est le cas, elle supprime l’enregistrement. Si StudentMarks n’est pas supérieur à 250, elle met à jour StudentMarks en ajoutant 25. S’il n’y a pas de correspondance, elle insère un nouvel enregistrement avec une valeur StudentMarks de 25.

Maintenant, jetons un coup d’œil au plan d’exécution de l’opérateur MERGE :

Plan d'exécution de MERGE

Comme vous pouvez le voir sur le plan d’exécution, la propriété Nombre d’exécutions suggère une valeur de 1. Cela signifie que l’opération MERGE effectue les opérations d’insertion, de mise à jour et de suppression en un seul passage. Cette efficacité fait de l’opération MERGE un outil puissant pour la manipulation de données.

Je recommande vivement d’utiliser l’opération MERGE dans votre développement, en particulier dans les applications d’entreposage de données. Elle simplifie votre code et améliore les performances en réduisant le nombre de lectures et d’écritures de la base de données.

Donc, la prochaine fois que vous vous retrouverez à écrire des instructions séparées pour la manipulation de données, envisagez d’utiliser l’opération MERGE dans SQL Server. Cela vous fera gagner du temps et des efforts, et rendra votre code plus efficace.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.