Sql Server – Comment comparer le hachage de deux lignes dans la fusion

J'ai plusieurs tables de travail que je fusionne en une table finale qui sera utilisée pour l'affichage. Si la table d'affichage ne contient pas la key primaire compilée à partir des tables de travail (ci-après appelée src) alors j'insère la ligne dans l'affichage. Cela fonctionne bien, la partie suivante est confuse pour moi.

Si la key primaire est déjà affichée, je veux seulement mettre à jour la ligne d'affichage si la ligne src a la même key primaire mais qu'au less une colonne est différente de la ligne d'affichage. Je voudrais implémenter cela en utilisant la méthode HASHBYTES () en utilisant l'algorithm MD5.

De msdn, la syntaxe devrait ressembler à ceci: HASHBYTES('MD5', {@variable | 'ssortingng'})

Je veux être capable de faire quelque chose comme ça dans ma déclaration de fusion:

WHEN MATCHED AND HASHBYTES('MD5', display) != HASHBYTES('MD5', src) THEN ...(stuff)

Comment puis-je compléter la fonction HASHBYTES?

Voici ma déclaration de fusion actuelle

 MERGE dbo.DisplayCases AS display USING (SELECT CaseId, Title, projects.ProjectName, categories.CategoryTitle, Root, milestones.MilestoneName, milestones.MilestoneDate, Priority, statuses.StatusTitle, EstimatedHours, ElapsedHours, personAssigned.Name as AssignedTo, personResolved.Name as ResolvedBy, cases.IsResolved, IsOpen, Opened, Resolved, Uri, ResolveUri, OutlineUri, SpecUri, ParentId, Backlog FROM fogbugz.Cases cases JOIN fogbugz.Projects projects ON cases.ProjectId = projects.ProjectId JOIN fogbugz.Categories categories ON cases.CategoryId = categories.CategoryId JOIN fogbugz.Milestones milestones ON cases.MilestoneId = milestones.MilestoneId JOIN fogbugz.Statuses statuses ON cases.Status = statuses.StatusId JOIN fogbugz.People personAssigned ON cases.AssignedTo = personAssigned.Id LEFT JOIN fogbugz.People personResolved ON cases.ResolvedBy = personResolved.Id ) as src ON display.CaseId = src.CaseId WHEN NOT MATCHED THEN INSERT(CaseId, CaseTitle, ProjectName, CategoryTitle, RootId, MilestoneName, MilestoneDate, Priority, StatusTitle, EstHrs, ElapsedHrs, AssignedTo, ResolvedBy, IsOpen, IsResolved, Opened, Resolved, Uri, ResolveUri, OutlineUri, Spec, ParentId, Backlog) VALUES(src.CaseId, src.Title, src.ProjectName, src.CategoryTitle, src.Root, src.MilestoneName, src.MilestoneDate, src.Priority, src.StatusTitle, src.EstimatedHours, src.ElapsedHours, src.AssignedTo, src.ResolvedBy, src.IsResolved, src.IsOpen, src.Opened, src.Resolved, src.Uri, src.ResolveUri, src.OutlineUri, src.SpecUri, src.ParentId, src.Backlog); 

Du commentaire de Martin Smith …

Vous pourriez faire WHEN MATCHED AND EXISTS(SELECT Source.* EXCEPT SELECT Target.*) THEN UPDATE ...