【发布时间】:2017-04-09 13:10:54
【问题描述】:
我的表包含有关Employee 的数据。但是它是一个临时表,EmployeeID 这里不是主键。该表可能多次包含给定的EmployeeID。
现在,我必须选择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
为一批。 这工作正常,行号随线程号而变化。
现在假设,第二批以 EmployeeId 978 开头。那么这个员工将在第一批和第二批。也就是说,同一个员工被发送到多个线程,可能会导致冲突。
虽然这种情况非常罕见,但我必须避免这种情况。
这里有什么可能的解决方案?
【问题讨论】:
-
将预期结果作为样本数据提供比用文字解释预期结果更容易理解。
标签: sql sql-server vb.net multithreading batch-processing