IF (OBJECT_ID('tempdb..#Block') IS NOT NULL)DROP TABLE #BlockIF (OBJECT_ID('tempdb..#SampleNumbers') IS NOT NULL)DROP TABLE #SampleNumbersCREATE TABLE #Block (N CHAR(3) PRIMARY KEY WITH(FILLFACTOR = 100), isProcessed BIT DEFAULT(0))CREATE TABLE #SampleNumbers (Block CHAR(7) PRIMARY KEY)INSERT INTO #Block(N)SELECT '000' AS N UNION ALLSELECT TOP 999 RIGHT ('000' + CAST( ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS VARCHAR),3)FROM sys.all_columns;INSERT INTO #SampleNumbersSELECT * FROM (VALUES ('1234567'),('2345678'),('3456789'),('4567890'))x(TopLevel)--INSERT INTO MyTable SELECT Block + N FROM #SampleNumbers CROSS JOIN #Block
IF (OBJECT_ID('tempdb..#tempSample') IS NOT NULL)DROP TABLE #tempSampleCREATE TABLE #tempSample (Block CHAR(7))CREATE CLUSTERED INDEX uix_tmpSampleIndex ON #tempSample(Block)DECLARE @Count INT = 1WHILE @Count > 0BEGIN BEGIN TRY BEGIN TRANSACTION UPDATE TOP (500) a SET isProcessed = 1 OUTPUT inserted.Block INTO #tempSample FROM #SampleNumbers a WHERE isProcessed = 0 SET @Count = @@ROWCOUNT --INSERT INTO MyTable (MyCol) SELECT Block + N FROM #tempSample CROSS APPLY #Num COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION END CATCH TRUNCATE TABLE #tempSampleWAITFOR DELAY '00:00:01'ENDDROP TABLE #tempSample