我有合并的源表,目标表具有相同的字段。
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
答案 0 :(得分:2)
ID
,即您的MERGE ON
列)。
您可以在源代码中使用分组,以便每个ID
只需一个值,或者您可以事先清理源代码,每个{{1}只有一个记录}。