2017-05-23 84 views
0

我有这个源表为我的合并和目标表具有相同的字段。SQL SERVER MERGE错误

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 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

'Id'是IDENTITY列? –

+0

是ID是标识列 – user3312649

+1

您不能插入'IDENTITY'列的值。如果它只是一个主键,那么它也不会允许您添加重复值。您必须在新表格中添加您正在插入的“ID”作为“FK”。 –

回答

2

你有 复制你的源 (基于ID ,这是你的MERGE ON列)。

你既可以用在你的源组合,这样只需要每每ID一个值,或者你可以先清理源让每个ID只有一个记录。

+0

谢谢你。非常感激。 – user3312649

+0

嘿,欢迎你:) –