如果存在,合并的声明

0

的问题

我们的数据流入的一个表格从多个其他表格可以说:Table_A 然后,我有一个合并存储的过程,需要数据从表一合并,它与表B。

然而,有些东西似乎不是正确的。 如果我截断和负荷的数据,它工作得很好,但是如果我不截断和负载,并只获取的查询通过eachh小时,我得到错误的消息说

Msg8672级别16状态1、程序Merge_Table_A4行[批量启动线0] 合并的声明试图以更新或删除同一行超过一次。 这种情况发生在一个目标行相匹配的多个源排。 合并声明无法更新/删除的相同行为的目标表多次。 完善关条款,以确保目标的行匹配最多的一个源排,或使用组通过的条款组源行。

我如何可以克服这个吗?

我希望能够逐步载的数据并不截断负载,但同时有一个保存proc或更新插入或不关心如果该行已经存在。

azure sql-merge sql-server
2021-11-24 01:52:34
1

最好的答案

1

似乎你有 重复的行 在你的目标表,其中载入从以前的运行。

:匹配合并不考虑插入的行(甚至重复),同时运行的合并本身。

下面是我的摄制的例子有一个样本数据:

表1:初步数据

enter image description here

表2:表的目标

enter image description here

合并的声明:

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;

当合并执行,它将插入的所有数据,没有任何错误。

enter image description here

新的数据在tb1:

enter image description here

当我运行的合并发言中,它给了我的相同的错误。

enter image description here

作为一种解决办法 使用一个以下的选择,

  1. 添加额外的条件, 如果可能的话在条款以独特的识别数据。

  2. 删除重复 ,从来源和合并数据进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成功。

enter image description here

2021-12-02 12:52:40

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................