I suggest a hybrid method.
Do something like the first method except that you begin new transactions only at certain record counts, for example, every 2000 values processed:
record #1; record #2001; record #4001; etc.
You can adjust the number up or down as needed to reduce locking.
Every one in a separate transaction is huge overhead in creating and committing trans.
All in one transaction is huge overhead if it has to rollback after doing a lot of inserts/updates.
SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.