If your table t1 and it's backup t2 have many columns, here's a compact way to do it.
In addition, my related problem was that only some of the columns were modified and many rows had no edits to these columns, so I wanted to leave those alone - basically restore a subset of columns from a backup of the entire table.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
Without uniqueness, you are reduced to something like @Paul Karr's loop -- and if there is not a unique correlation, then more than one target row may be updated for each source row.
where_clause: The clauses in the MERGE statement have the following definitions.
INTO Clause - The INTO clause is used to specify the target table into which you are inserting or updating.
If you want to just restore all rows, skip the where clause.
Of course the simpler way would be to delete and insert as select, but in my case I needed a solution with just updates.
The MERGE statement is designed to combine multiple operations to reduce the complexity of mixed insert and update operations.