I'd add a field to the staging table that allows me to batch things. So if I loaded 10 records, I'd mark those 10 as "in process", and if there are 20 more records added, I'll process them later. This lets me better deal with continuous changes. When I'm done, i'd mark these as loaded.
In this way, often what I'd do is test either deleting matching records or use the not exists to insert these. I haven't tested EXCEPT, but some people like it. Honestly, you should test these all on your system and evaluate the performance impact. However, I like the simplicity of deleting matches, then inserting new rows.
One note, if you have identity columns, can you be sure they match? I worry that changes in the target system will cause you issues here.
Is the staging table emptied ever?