Fusionner - Ne mettre à jour que si les valeurs ont changé
Je suis en cours d'exécution d'une fusion dans SQL Server. Dans ma mise à jour, je veux seulement mettre à jour la ligne si les valeurs ont changé. Il existe une version en ligne qui s'incrémente à chaque mise à jour. Ci-dessous est un exemple:
MERGE Employee as tgt USING
(SELECT Employee_History.Emp_ID
, Employee_History.First_Name
, Employee_History.Last_Name
FROM Employee_History)
as src (Emp_ID,First_Name,Last_Name)
ON tgt.Emp_ID = src.Emp_ID
WHEN MATCHED THEN
UPDATE SET
Emp_ID = src.Emp_ID,
,[VERSION] = tgt.VERSION + 1
,First_Name = src.First_Name
,Last_Name = src.Last_Name
WHEN NOT MATCHED BY target THEN
INSERT (Emp_ID,0,First_Name,Last_Name)
VALUES
(src.Emp_ID,[VERSION],src.First_Name,src.Last_Name);
Maintenant, si je voulais seulement mettre à jour la ligne, et donc incrément de version, UNIQUEMENT si le nom a changé.
source d'informationauteur TrialAndError
Vous devez vous connecter pour publier un commentaire.
WHEN MATCHED
peut avoirAND
. Aussi, pas besoin de mettre à jourEMP_ID
.Si le Nom ou Prenom sont les valeurs null, vous devez prendre soin de
NULL
valeurs lors de la comparaison de trg.Nom <> src.Le nom , par exempleISNULL(trg.Last_Name,'') <> ISNULL(src.Last_Name,'')
Plutôt que d'éviter une mise à jour tout à fait, vous pourriez changer votre
[VERSION] + 1
code à ajouter à zéro lorsque les noms de match: