Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IF OBJECT_ID('tempdb..#data') IS NOT NULL DROP TABLE #data
- IF OBJECT_ID('tempdb..#data_for_iteration') IS NOT NULL DROP TABLE #data_for_iteration
- DECLARE @batchSelectSize int = 1000000, @batchUpdateSize int = 2000;
- CREATE TABLE #data (user_id uniqueidentifier, transaction_id int);
- CREATE TABLE #data_for_iteration (user_id uniqueidentifier, transaction_id int);
- WHILE 1=1
- BEGIN;
- INSERT #data(user_id, transaction_id)
- SELECT TOP (@batchSelectSize) td.user_id, td.transaction_id
- FROM transaction_details td
- INNER JOIN transactions t
- ON td.transaction_id = t.id
- WHERE t.user_id IS NULL;
- IF (select count(*) from #data) = 0 BEGIN; PRINT 'No more data to process. Terminating'; BREAK; END;
- WHILE 1=1
- BEGIN;
- DELETE TOP (@batchUpdateSize) #data OUTPUT Deleted.user_id, Deleted.transaction_id
- INTO #data_for_iteration (user_id, transaction_id);
- IF @@ROWCOUNT = 0 BEGIN; PRINT 'No more data to process while updating. Terminating'; BREAK; END;
- UPDATE t
- SET t.user_id = dfi.user_id
- FROM transactions t
- INNER JOIN #data_for_iteration dfi
- ON t.id = dfi.transaction_id
- TRUNCATE TABLE #data_for_iteration;
- END;
- TRUNCATE TABLE #data;
- END
- DROP TABLE #data;
- DROP TABLE #data_for_iteration;
Advertisement
Add Comment
Please, Sign In to add comment