我目前有一个存储过程,该过程将目标表(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时,不仅要更新该行,还需要删除该行,然后将其重新插入到目标表中。每当我找到一个匹配项时,谁能告诉我如何一个接一个地删除和插入?
这是一个例子:
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
子句中。