Problem
You have a list of record IDs and their new values and you need to apply them in one safe, repeatable update.
Solution
Load the updates into a temp table, preview the join, then run an UPDATE ... FROM inside a transaction.
-- 1) Load updates
CREATE TABLE #temp_updates (
id INT NOT NULL PRIMARY KEY, -- match target_table.id type
new_some_column NVARCHAR(255) NOT NULL -- match target_table.some_column type/length
);
INSERT INTO #temp_updates (id, new_some_column) VALUES
(123, N'Updated Value A'),
(456, N'Updated Value B'),
(789, N'Updated Value C');
-- 2) Preview what will change (always do this first)
SELECT t.id, t.some_column AS old_value, tu.new_some_column AS new_value
FROM target_table t
JOIN #temp_updates tu ON tu.id = t.id;
-- 3) Apply update (transaction makes it easy to rollback if needed)
BEGIN TRAN;
UPDATE t
SET t.some_column = tu.new_some_column
FROM target_table t
JOIN #temp_updates tu ON tu.id = t.id;
SELECT @@ROWCOUNT AS rows_updated;
-- If the rowcount looks wrong, rollback instead of commit.
COMMIT; -- or ROLLBACK;
DROP TABLE #temp_updates;
Notes
- SQL Server syntax: UPDATE … FROM and #temp tables are session-scoped.
- Add a PRIMARY KEY on id to prevent duplicate IDs in the update list.
- For large lists, insert in batches and consider indexing the temp table if you join on more than one column.
- If you only want to update changed rows, add:
WHERE t.some_column <> tu.new_some_column OR t.some_column IS NULL