update table2.field4
create new record in table2
This bit is not very clear on your question. Are you doing BOTH? An update and creating a new record on Table2? What is the update going to be? Using MERGE, you will not be able to execute both. However, you could use the MERGE to perform the inserts, OUTPUT these results into a temporary table, and then execute the updates based on the temporary table. Something like:
-- Create a temporary table variable to hold the output actions.
DECLARE @changes TABLE(Change VARCHAR(20), T2RecordID, T2Field1, T2Field2, T2Field4, T2OldField4 );
MERGE Table2 as target
USING Table1 as source
ON ( target.field1 = source.field1 AND target.Column4 = 'Y' )
WHEN NOT MATCHED THEN INSERT ( fiel1, field2, field4 )
VALUES ( source.field1, source.field2, 'Y' )
WHEN MATCHED AND target.field2 <> source.field2 THEN UPDATE SET target.Column4 = '?'
OUTPUT $action, inserted.id /*assuming an autonumber field here*/, inserted.field1, inserted.field2, inserted.field4, deleted.field4 INTO @changes;
--@changes will now contain a record of all the changes that have been made. Use this data to do the "create new record in table2" as necessary.
Open in new window