• Nice article. Your numbering system needs alignment (starts off zero-based and moves to one-based in the results table).

    I would be interested to see whether the final 'staging table' option would run even faster if it was indexed just before issuing the UPDATE.

    Another technique I have seen used is INSERTing all rows (inserts and updates) directly into a flat view of the table (create view as select * from table) which contains an INSTEAD OF INSERT trigger which performs a MERGE. The good thing about this is that, by tuning batch commit size in the SSIS destination, you can achieve a near-continuous data flow. Might be worth a test ...

    If you haven't even tried to resolve your issue, please don't expect the hard-working volunteers here to waste their time providing links to answers which you could easily have found yourself.