Guest User

Untitled

a guest
Feb 9th, 2025
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. IF OBJECT_ID('tempdb..#data') IS NOT NULL DROP TABLE #data
  2. IF OBJECT_ID('tempdb..#data_for_iteration') IS NOT NULL DROP TABLE #data_for_iteration
  3. DECLARE @batchSelectSize int = 1000000, @batchUpdateSize int = 2000;
  4.  
  5. CREATE TABLE #data (user_id uniqueidentifier, transaction_id int);
  6. CREATE TABLE #data_for_iteration (user_id uniqueidentifier, transaction_id int);
  7. WHILE 1=1
  8. BEGIN;
  9. INSERT #data(user_id, transaction_id)
  10. SELECT TOP (@batchSelectSize) td.user_id, td.transaction_id
  11. FROM transaction_details td
  12. INNER JOIN transactions t
  13. ON td.transaction_id = t.id
  14. WHERE t.user_id IS NULL;
  15.  
  16. IF (select count(*) from #data) = 0 BEGIN; PRINT 'No more data to process. Terminating'; BREAK; END;
  17.  
  18. WHILE 1=1
  19. BEGIN;
  20. DELETE TOP (@batchUpdateSize) #data OUTPUT Deleted.user_id, Deleted.transaction_id
  21. INTO #data_for_iteration (user_id, transaction_id);
  22.  
  23. IF @@ROWCOUNT = 0 BEGIN; PRINT 'No more data to process while updating. Terminating'; BREAK; END;
  24.  
  25. UPDATE t
  26. SET t.user_id = dfi.user_id
  27. FROM transactions t
  28. INNER JOIN #data_for_iteration dfi
  29. ON t.id = dfi.transaction_id
  30.  
  31. TRUNCATE TABLE #data_for_iteration;
  32. END;
  33. TRUNCATE TABLE #data;
  34. END
  35. DROP TABLE #data;
  36. DROP TABLE #data_for_iteration;
Advertisement
Add Comment
Please, Sign In to add comment