我需要下载并更新包含代码及其说明的目录。所以我试图将这些数据导入临时表并使用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中并不强大,所以期待解决我的问题。
提前致谢。
答案 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)
在目标表上创建唯一索引以防止重复。