ถ้าอยู่ก่อนแล้วผนวกรวมคำให้การ

0

คำถาม

ฉันมีข้อมูลของเคลื่อนเข้าไปในหนึ่งโต๊ะจากหลายๆอื่นตารางข้อมูลเรียบร้อยแล้วปล่อยให้พูดว่า:Table_A งั้นฉันต้องเป็นผนวกรวมเก็บ proc นั่นต้องใช้ข้อมูลจากโต๊ะค merges มันกับโต๊ะบี

อย่างไรก็ตามบางอย่างมันไม่เหมือนจะถูกต้อง ถ้าฉันลดความยาวและโหลดข้อมูลมันทำงานสบายดีแต่ถ้าฉันไม่ลดความยาวและเรียกใช้และเรียงกับการค้นหาโดย eachh ชั่วโมงฉันจะได้ข้อผิดพลาดข้อความบอกว่า

Msg 8672,ระดับเด็กอายุ 16 ของรัฐ 1,ขั้นตอน Merge_Table_A สาย 4[การประมวลผลกลุ่มภาพเริ่มเส้น 0] คผนวกรวมคำให้การพยายามที่จะปรับปรุงหรือลบเดียวกันแถวนี้มากกว่าหนึ่งครั้ง นี่มันเกิดขึ้นตอนที่เป็นเป้าหมายแถวตรงกับมากกว่าหนึ่งแหล่งแถวหน้านะ เป็นผนวกรวมคำให้การไม่สามารถปรับปรุง/ลบเดียวกันแถวของเป้าหมายบนโต๊ะหลายครั้งแล้ว Refine คนในเงื่อนไขว่าต้องให้แน่ใจว่าเป็นเป้าหมายแถวตรงกับที่ที่หนึ่งแหล่งแถวหรือใช้จัดกลุ่มตามเงื่อนไขว่าต้องกลุ่มคนแถวแหล่งข่าว.

จะให้ฉันเอาชนะเรื่องนี้?

ฉันต้องการที่จะสามารถที่จะ incrementally โหลดข้อมูลและไม่ได้ทำลดความยาวจริงเชียวแต่ว่าในเวลาเดียวกันมีที่เก็บไว้ proc ที่ปรับปรุงหรือแทรกหรือ doesnt สนใจหรอกถ้าคนแถวนี้อยู่แล้ว

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

คำตอบที่ดีที่สุด

1

ดูเหมือนคุณต้อง ที่ซ้ำกันออกนวนแถว ของคุณอยู่ในเป้าหมายบนโต๊ะซึ่งโหลดจากของคุณก่อนหนีไปแล้ว

ข้อค:ตรงกับในคผนวกรวมไม่ได้คิดถึงแถวที่ถูกแทรก(แม้แต่ที่ซ้ำกัน)ระหว่างทำการผนวกรวมตัวมันเอง

ด้านล่างนี้เป็นของฉัน repro ตัวอย่างกับเป็นตัวอย่างข้อมูล:

Table1:เริ่มการข้อมูล

enter image description here

Table2:Taget โต๊ะ

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

เป็น workaround โดยใช้หนึ่งในด้านล่างทางเลือก

  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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่