Maison  >  Article  >  base de données  >  Comment éviter les enregistrements en double dans les opérations SQL INSERT à l'aide de MERGE ?

Comment éviter les enregistrements en double dans les opérations SQL INSERT à l'aide de MERGE ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 03:46:29344parcourir

How to Prevent Duplicate Records in SQL INSERT Operations Using MERGE?

Atténuation des enregistrements en double dans les opérations SQL INSERT

De nombreux systèmes de bases de données fournissent des mécanismes pour empêcher l'insertion d'enregistrements en double dans les tables. Dans ce cas, vous devez vous prémunir contre les insertions en double dans une table appelée « Délégués » qui contient les champs suivants :

  • ID (Auto-incrémentation, Primaire)
  • MemberNo
  • FromYr
  • ToYr

Vous effectuez des insertions à l'aide de la requête suivante :

<code class="sql">INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)</code>

Cependant, cette approche n'empêche pas les utilisateurs d'insérer par erreur enregistrements en double pour le même membre et la même année.

Solution utilisant MERGE

Pour éviter les insertions en double, vous pouvez utiliser l'instruction MERGE, qui fournit un moyen pratique d'effectuer plusieurs opérations (insertion, mise à jour ou suppression) basées sur une comparaison entre deux tables ou une table et un ensemble de valeurs.

Dans ce cas, l'instruction MERGE peut être utilisée comme suit :

<code class="sql">MERGE INTO Delegates D
USING (values(@MemNo, @FromYr,@ToYr)) X ([MemNo],[FromYr],[ToYr])
ON (insert unique key join)
WHEN NOT MATCHED BY TARGET THEN
INSERT ([MemNo],[FromYr],[ToYr]))
VALUES (X.[MemNo],X.[FromYr],X.[ToYr]);</code>

Cette instruction accomplit ce qui suit :

  • La clause USING spécifie les valeurs à insérer ou à comparer avec les enregistrements existants.
  • La clause ON définit la condition de jointure qui identifie de manière unique les enregistrements existants. enregistrements. Dans ce cas, vous pouvez utiliser une combinaison appropriée de champs pour garantir l'unicité (par exemple, MemberNo et FromYr).
  • La clause WHEN NOT MATCHED BY TARGET spécifie qu'une opération d'insertion ne doit se produire que si aucun enregistrement correspondant n'est trouvé. dans la table existante.
  • La clause VALUES fournit les valeurs à insérer si un enregistrement correspondant n'est pas trouvé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn