2

我有几个工作表,我将它们合并到一个用于显示的最终表中。如果显示表不包含从工作表(以下称为 src)编译的主键,那么我将该行插入到显示中。这很好用,下一部分让我感到困惑。

如果主键已经在显示中,我只想在 src 行具有相同的主键但至少有一列与显示行不同时更新显示行。我想使用 MD5 算法的 HASHBYTES() 方法来实现这一点。

在 msdn 中,语法应如下所示:HASHBYTES('MD5', {@variable | 'string'})

我希望能够在我的合并语句中做这样的事情:

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

如何完成 HASHBYTES 函数?

这是我当前的合并语句

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);
4

1 回答 1

2

从马丁史密斯的评论...

你可以做WHEN MATCHED AND EXISTS(SELECT Source.* EXCEPT SELECT Target.*) THEN UPDATE ...

于 2013-07-03T16:34:44.790 回答