私は SQL 2008 を使用しており、テーブルにあるデータをバッチで処理しようとしていますが、問題があります。データはグループに分割され、処理を行う際に、グループが常にバッチ内に含まれるようにする必要があります。つまり、グループが異なるバッチに分割されないようにする必要があります。バッチ サイズは常にグループ サイズよりもはるかに大きいと想定されています。これが私の意味を説明するためのセットアップです(コードはJeff Modenのデータ生成ロジックを使用しています:http://www.sqlservercentral.com/articles/Data+Generation/87901)
DECLARE @NumberOfRows INT = 1000,
@StartValue INT = 1,
@EndValue INT = 500,
@Range INT
SET @Range = @EndValue - @StartValue + 1
IF OBJECT_ID('tempdb..#SomeTestTable','U') IS NOT NULL
DROP TABLE #SomeTestTable;
SELECT TOP (@NumberOfRows)
GroupID = ABS(CHECKSUM(NEWID())) % @Range + @StartValue
INTO #SomeTestTable
FROM sys.all_columns ac1
CROSS JOIN sys.all_columns ac2
これにより、それぞれに 1 ~ 7 個のレコードを含む、約 435 個のレコード グループを持つテーブルが作成されます。ここで、バッチごとに 100 レコードのバッチでこれらのレコードを処理したいとします。GroupID が異なるバッチ間で分割されないようにするにはどうすればよいですか? 各バッチが正確に 100 レコードでなくても問題ありません。多少多くても少なくてもかまいません。
提案に感謝します!