当前位置:  开发笔记 > 编程语言 > 正文

SQL合并-如何删除然后插入匹配/现有数据?

如何解决《SQL合并-如何删除然后插入匹配/现有数据?》经验,为你挑选了1个好方法。

我目前有一个存储过程,该过程将目标表(Ticket_Report)与数据源表(New_Tickets)进行比较。

我正在使用MERGE INTO语句来比较这两个。当找到两个表之间的匹配项时,它将使用源表中的相应信息更新目标表中的当前行。如果找不到匹配项,它将把数据从源表插入目标表。

 MERGE INTO Ticket_REPORT T1
  USING @New_Tickets T2
  ON T1.TICKET_NO=T2.TICKET_NO
  WHEN MATCHED THEN
  UPDATE SET 
      T1.TICKET_NO = T2.TICKET_NO, 
      T1.ASSIGNED_GROUP = T2.ASSIGNED_GROUP, 
      T1.ASSIGNEE = T2.ASSIGNEE, 
      T1.FNAME = T2.FNAME, 
      T1.LNAME = T2.LNAME
WHEN NOT MATCHED THEN
  INSERT VALUES(
      T2.TICKET_NO, 
      T2.ASSIGNED_GROUP, 
      T2.ASSIGNEE, 
      T2.FNAME, 
      T2.LNAME
 );

我需要做的是,当我找到一个MATCH时,不仅要更新该行,还需要删除该行,然后将其重新插入到目标表中。每当我找到一个匹配项时,谁能告诉我如何一个接一个地删除和插入?



1> Giorgi Nakeu..:

这是一个例子:

DECLARE @t1 TABLE(id INT IDENTITY, col1 INT)
DECLARE @t2 TABLE(id INT IDENTITY, col1 INT, old_col1 INT)

INSERT INTO @t1(col1) VALUES(5), (10), (15)
INSERT INTO @t2(col1) VALUES(7), (14), (21), (28)

MERGE INTO @t2 t2
USING @t1 t1 ON t1.id = t2.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES(t1.col1, NULL)
OUTPUT t1.col1, Deleted.col1 INTO @t2(col1, old_col1);

SELECT * FROM @t2
ORDER BY id

输出:

id  col1  old_col1
4   28    NULL
5   5     7
6   10    14
7   15    21

前3行在两个ID中都具有相同的ID,因此匹配部分将删除这些ID(7、14、21)。剩下28个。然后插入新值并将旧值保留在OUTPUT子句中。

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有