【问题标题】:How to avoid inserting duplicate records from source table while merge?合并时如何避免从源表中插入重复记录?
【发布时间】:2013-06-16 14:40:44
【问题描述】:

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

示例:临时表有数据

   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 方面并不强,所以期待我的问题的一些解决方案。

提前致谢。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

只是不要直接使用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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 投了你一票。当我在上面发表评论时,没有在屏幕底部看到你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多