私のテーブルにはEmployee
に関するデータが含まれています。ただし、これは一時テーブルで、EmployeeID
はプライマリキーではありません。テーブルには、EmployeeID
を複数回含むことがあります。SQL Server:従業員のバッチを作成し、1つのempが複数のバッチに移動するのを防ぐ
今、私はbatchSize
というレコードのバッチを選択しなければなりません。今は200を考えてみましょう。これらのバッチを複数のスレッドに送信します。
私はこのクエリを書かれている:
WITH SingleBatch AS
(
SELECT
*,
ROW_NUMBER() OVER(ORDER BY EmployeeId) AS RowNumber
FROM
TemperoryTable
)
SELECT *
FROM SingleBatch
WHERE RowNumber BETWEEN 1 AND 200;
結果は次のようになります。
EmployeeID EffectiveDate
1 123 01/01/2016
2 541 01/01/2016
------------------------
------------------------
200 978 18/06/2015
1つのバッチのために。 これは正常に動作し、行番号はスレッド番号と共に変わります。
ここで、2番目のバッチがEmployeeId 978
で始まるとします。その後、この従業員は最初のバッチと2番目のバッチになります。つまり、同じ従業員が複数のスレッドに送られている可能性があります。 シナリオは非常にまれですが、私はこれを避けなければなりません。
可能な解決策は何でしょうか?平均RowNumber関数> = 1とRowNumber関数間
期待される結果をサンプルデータとして提供することは、期待される結果を言葉で説明するよりもはるかに理解しやすくなります。 – Viki888