似乎你有 重复的行 在你的目标表,其中载入从以前的运行。
注:匹配合并不考虑插入的行(甚至重复),同时运行的合并本身。
下面是我的摄制的例子有一个样本数据:
表1:初步数据
表2:表的目标
合并的声明:
MERGE tb2 AS Target
USING tb1 AS Source
ON Source.firstname = Target.firstname and
Source.lastname = Target.lastname
-- For Inserts
WHEN NOT MATCHED BY Target THEN
INSERT (firstname, lastname, updated_date)
VALUES (Source.firstname, Source.lastname, source.updated_date)
-- For Updates
WHEN MATCHED THEN UPDATE SET
Target.updated_date = Source.updated_date
-- For Deletes
WHEN NOT MATCHED BY Source THEN
DELETE;
当合并执行,它将插入的所有数据,没有任何错误。
新的数据在tb1:
当我运行的合并发言中,它给了我的相同的错误。
作为一种解决办法 使用一个以下的选择,
添加额外的条件, 如果可能的话在条款以独特的识别数据。
删除重复 ,从来源和合并数据进tb2如下。
--temp table
drop table if exists #tb1;
select * into #tb1 from (
select *, row_number() over(partition by firstname, lastname order by firstname, lastname, updated_date desc) as rn from tb1) a
where rn = 1
MERGE tb2 AS Target
USING #tb1 AS Source
ON Source.firstname = Target.firstname and
Source.lastname = Target.lastname
-- For Inserts
WHEN NOT MATCHED BY Target THEN
INSERT (firstname, lastname, updated_date)
VALUES (Source.firstname, Source.lastname, source.updated_date)
-- For Updates
WHEN MATCHED THEN UPDATE SET
Target.updated_date = Source.updated_date
-- For Deletes
WHEN NOT MATCHED BY Source THEN
DELETE;
数据合并成tb2成功。