As I was catching up on SQL 2008 this morning, I spent some time working with the T-SQL MERGE command, new in SQL 2008. Most of the blogs and examples online are a bit terse, so I decided to write a simple sample.
Check it out:
--// Create our SOURCE table DECLARE @t1 TABLE ( id int, name nvarchar(16), email nvarchar(32) ) --// Create our TARGET table DECLARE @t2 TABLE ( id int, name nvarchar(16), email nvarchar(32) ) --// Insert values into SOURCE table INSERT INTO @t1 VALUES (1, 'Charles Chen', 'charles.chen@domain.com') INSERT INTO @t1 VALUES (2, 'Sandra Chen', 'sandra.chen@domain.com') INSERT INTO @t1 VALUES (3, 'Brad Wright', 'brad.wright@domain.com') --// Insert values into TARGET table INSERT INTO @t2 VALUES (4, 'Brady Sines', 'brady.sines@domain.com') INSERT INTO @t2 VALUES (1, '', '') --// Select values from the TARGET table (just to verify) SELECT * FROM @t2 --// Merge records from source to target MERGE @t2 AS [target] USING @t1 AS [source] ON ([target].id = [source].id) WHEN NOT MATCHED BY TARGET THEN INSERT(id, name, email) VALUES([source].id, [source].name, [source].email) WHEN MATCHED THEN UPDATE SET [target].name = [source].name, [target].email = [source].email --// Get the journal of actions OUTPUT $action, inserted.*, deleted.*; --// Grab the resultant table SELECT * FROM @t2
And here are the results:
Awesome! Admittedly, I'm still trying to come up with some legitimate uses for this in my day-to-day application programming
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, u
newtelligence dasBlog 2.3.9074.18820
This site is a combo blog/portfolio for me, Charles Chen.
Sign In