- 'MERGE' is a sql command introduced with SQL Server 2008 which makes ease of inserting & updating records between source and target tables. This is similar to a command in Oracle which is called 'UPSERT'.
- Though it causes a little penalty in performance but its a very reliable and powerful command. Though it has slight impact in performance it is more powerful & robust command when compared to the traditional way of writing INSERTs, UPDATESs & DELETEs separately as with this command selextion happens only once.
- There are 3 separate matching clauses you can specify. The 3 matching clauses are:
- WHEN MATCHED
- WHEN [TARGET] NOT MATCHED
- WHEN SOURCE NOT MATCHED
- This command is so flexible with many options like you can specify constraints along with 'MATCHED' or 'UNMATCHED' clause as below,
- WHEN MATCHED AND order_id> 1234
- It is acceptable to have multiple instances of same matching clause without any restrictions.
- We can have $action function which outputs the type of action performed like INSERT, UPDATE or DELETE.
- This is very useful command to sync two or more tables,
Example:
CREATE TABLE temp_to_load_all_chnages( id INT, fname VARCHAR(10), lname VARCHAR(10`), dob datetime, action_taken VARCHAR(20), NEW_id INT, NEW_fname VARCHAR(10), NEW_lname VARCHAR(10`), NEW_dob datetime, ); MERGE sqlcheckpoint_target_db..customer_details AS target USING (SELECT id, fname, lname, dob FROM sqlcheckpoint_source_db..customer_details) AS source ON (target.id = source.id) WHEN MATCHED THEN UPDATE SET id = source.id ,fname=source.fname ,lname = source.lname ,dob = source.dob WHEN NOT MATCHED BY TARGET THEN INSERT ( id, fname, lname, dob ) VALUES ( source.id, source.fname, source.lname, source.dob ) WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT deleted.*, $action, inserted.* INTO temp_to_load_all_chnages;
For syntax & more details please refer msdn link - click here to redirect to msdn
No comments:
Post a Comment