下面的查询会给我的ID列表我需要运行此之后立即执行更新:获取范围的最小值和最大值
SELECT TOP 5 WorkflowEventProcessingID
FROM Master.WorkflowEventProcessing
WHERE ProcessingToken IS NULL
ORDER BY WorkflowEventProcessingId
有没有办法让分(55034)和最大值(55038)这个范围的ID,在一个select语句,所以我可以做这样的事情:
UPDATE WorkflowEventProcessing
SET ProcessingToken = <guid here>
WHERE WorkflowEventProcessingId >= @minId
AND WorkflowEventProcessingId <= @maxId
我想是这样的,但我的路要走:
DECLARE @minId INT
DECLARE @maxId INT
SELECT TOP 5 @minId = min(WorkflowEventProcessingID), @maxId = MAX(WorkflowEventProcessingID)
FROM Master.WorkflowEventProcessing
WHERE ProcessingToken IS NULL
ORDER BY WorkflowEventProcessingId
编辑
我不想因为我得到这个死锁做一个更新与子SELECT。所以我被告知将SELECT和UPDATE分开,给单独的DELETE进程一个在UPDATE和SELECT之间运行的机会。
关于编辑和死锁。你是否尝试过把(nolock)放在你的子选择上? – Paparazzi 2012-08-17 15:16:44
您是否尝试过'SELECT' /'INTO'到临时表来缓冲您想要处理的ID?或者创建一个表变量并使用'INSERT' /'SELECT'来实现相同的目的? – HABO 2012-08-17 15:19:58