合并时如何避免从源表插入重复记录?

时间:2013-06-19 21:36:45

标签: sql sql-server

我需要下载并更新包含代码及其说明的目录。所以我试图将这些数据导入临时表并使用merge语句对我的目标表进行插入/更新,但我最终遇到了一个问题,即我的临时表有重复记录,我使用的合并语句插入了重复记录到目标表中。

示例:临时表有数据    代码说明     C1 Desc1     C2描述2     C1 Desc1

我希望我的目标表数据为    代码说明     C1 Desc1     C2 Desc2

我使用下面的合并声明:

 MERGE INTO Frames as Target using Temp as Source
 on Source.Code=Target.Code
 WHEN MATCHED THEN  UPDATE  set Target.Description=Source.Description 
 WHEN NOT MATCHED THEN insert (Code,Description) values (Code,Description);

但最后我的目标表有数据    代码说明     C1 Desc1     C2描述2     C1 Desc1

我知道这可能是对你们中的一些人的简单查询。但是我在Sql中并不强大,所以期待解决我的问题。

提前致谢。

2 个答案:

答案 0 :(得分:3)

不要直接使用Temp作为来源,而是首先根据不同的值过滤

MERGE INTO Frames as Target 
using (SELECT DISTINCT * FROM Temp) as Source
on Source.Code=Target.Code
WHEN MATCHED THEN  UPDATE  set Target.Description=Source.Description 
WHEN NOT MATCHED THEN insert (Code,Description) values (Code,Description);

答案 1 :(得分:1)

在目标表上创建唯一索引以防止重复。