下面的查詢會給我的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