4

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

示例:临时表有数据

   Code   Description
    C1       Desc1
    C2       Desc2
    C1       Desc1    

我希望我的目标表数据为

   Code   Description
    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);

但最后我的目标表有数据

   Code   Description
    C1       Desc1
    C2       Desc2
    C1       Desc1   

我知道这对你们中的一些人来说可能是一个简单的问题。但我在 Sql 方面并不强,所以期待我的问题的一些解决方案。

提前致谢。

4

2 回答 2

6

只是不要Temp直接用作 Source 而是首先将其过滤为不同的值

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);
于 2013-06-19T22:06:32.880 回答
2

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

于 2013-06-19T21:51:44.033 回答