タスクごとに更新を行う必要があると思います。これでうまくいきます (構文は SQL Server 用です)。
DECLARE @TaskID int
DECLARE @SubTaskPosition int
DECLARE curSubTaskPositionUpdate cursor fast_forward
FOR
SELECT TaskID, SubTaskPosition
FROM TaskDetails
WHERE SubTaskID = @SubTaskID
OPEN curSubTaskPositionUpdate
FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE TaskDetails
SET SubTaskPosition = SubTaskPosition - 1
WHERE TaskID = @TaskID
AND SubTaskPosition > @SubTaskPosition
FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
END
CLOSE curSubTaskPositionUpdate
DEALLOCATE curSubTaskPositionUpdate
TaskDetails から削除する前にそれを行うことに注意してください...そしておそらくすべてをトランザクションにラップしたいと思うでしょう。
Gordon Edit - この作業を行うには、更新コード内に削除コードを含める必要がありました。そうしないと、(a) 削除が最初に行われ、「where subtaskID = @subtaskID」が何も返されないか、(b) 再実行後に削除を行いました。注文と再注文(正しく!) は効果がありませんでした。
DECLARE @TaskID uniqueidentifier
DECLARE @SubTaskPosition int
DECLARE curSubTaskPositionUpdate cursor fast_forward
FOR
SELECT TaskID, SubTaskPosition
FROM TaskDetails
WHERE SubTaskID = @subTaskID
OPEN curSubTaskPositionUpdate
FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
WHILE @@FETCH_STATUS = 0
BEGIN
-- Delete the subTask
DELETE FROM TaskDetails
WHERE TaskID = @TaskID
AND SubTaskPosition = @SubTaskPosition
-- Update the other subTasks
UPDATE TaskDetails
SET SubTaskPosition = SubTaskPosition - 1
WHERE TaskID = @TaskID
AND SubTaskPosition > @SubTaskPosition
FETCH NEXT FROM curSubTaskPositionUpdate INTO @TaskID, @SubTaskPosition
END
CLOSE curSubTaskPositionUpdate
DEALLOCATE curSubTaskPositionUpdate