A Code Sample with Merge
Posted: April 4, 2016 Filed under: Uncategorized Leave a comment
DECLARE @red TABLE ( ID INT, V INT, Payload INT ); INSERT INTO @red VALUES ( 1, 1, 1 ), ( 2, 2, 2 ), ( 3, 1, 3 ), ( 4, 2, 4 ), ( 5, 1, 5 ), ( 6, 2, 6 ), ( 7, 1, 7 ), ( 8, 2, 8 ), ( 9, 1, 9 ); MERGE @red tgt USING ( SELECT * FROM @red WHERE [v] < (SELECT ISNULL(MAX([v]), -1) FROM @red) ) src ON tgt.id=src.id WHEN NOT MATCHED BY TARGET THEN INSERT (Payload) VALUES( src.Payload) WHEN NOT MATCHED BY SOURCE THEN Update Set ID=NULL,V=null ; SELECT * FROM @red; /* ID V Payload 1 1 1 NULL NULL 2 3 1 3 NULL NULL 4 5 1 5 NULL NULL 6 7 1 7 NULL NULL 8 9 1 9 */ -- MERGE @red tgt --Using ( select * from @red WHERE [v] >= (SELECT Isnull(Max([v]), -1) from @red ) ) src on tgt.id=src.id --When matched then --Delete --When not matched by target then -- INSERT (Payload) VALUES( src.Payload) ; -- /* -- ID V Payload --1 1 1 --3 1 3 --5 1 5 --7 1 7 --9 1 9 --*/ -- select * from @Red
Edit:
A post with interesting MERGE samples: