SQL SERVER MERGE错误

时间:2017-05-23 09:19:03

标签: sql sql-server-2008

我有合并的源表,目标表具有相同的字段。

ID       Name           Birth            Work
123      john doe       01/20/2000       plumber
123      john doe       01/20/2000       carpenter
234      john ere       12/12/1990       driver
345      john wel       02/21/1998       janitor

但是当我尝试使用Merge语句从源传输我的数据时,它会提示错误,例如"复制主键"有时"无法更新数据,因为它已经更新一次。"我该如何避免这些错误?

我想要做的是,在我的源表中,它充当了工人(历史)的承认,我的目标数据是主列表。任何人都可以帮我解决这个错误吗?

这是我的疑问:

MERGE EMPMASTER  as T
USING (Select ID,Name,Birth,Work from ADMISSION) as S
ON (CAST(T.IDNum as int)=Cast(S.ID as int))
WHEN NOT MATCHED by TARGET
THEN
INSERT (IDNum,EMPName,EMPBirth,EMPWork)

Values (ID,Name,Birth,Work)

WHEN MATCHED  THEN

UPDATE Set IDNum=ID,
           EMPName=Name,
           EMPBirth=Birth,
           EMPWork=Work);

因此,在我的主列表中,它看起来像:

ID       Name           Birth            Work
    123      john doe       01/20/2000       carpenter
    234      john ere       12/12/1990       driver
    345      john wel       02/21/1998       janitor

1 个答案:

答案 0 :(得分:2)

你有 的重复 在您的来源上(基于ID,即您的MERGE ON列)。

您可以在源代码中使用分组,以便每个ID只需一个值,或者您可以事先清理源代码,每个{{1}只有一个记录}。