我在很長一段時間裏使用了這個stackoverflow技巧,並且在相當長的一段時間內工作正常。 Generate an Update SQL for Changing the Order of an Item?更改行的順序不工作?
但是,如果有一個記錄缺少行之間,它將無法正常工作。看到這個示例,
declare @MyTable table
(
[ID] INT,
[Order] INT,
Name VARCHAR(20)
)
insert into @MyTable values(11111,1,'A'), (22222,2,'B'), (3333,3,'C'),(44444,4,'D');
select * from @MyTable;
--which will gives you
----------------------
-- ID Order Name
-- 11111 1 A
-- 22222 2 B
-- 3333 3 C
-- 44444 4 D
----------------------
-- Now just delete a row
delete from @MyTable where [ID] = 3333;
select * from @MyTable;
--which will gives you
--------------------
-- ID Order Name
-- 11111 1 A
-- 22222 2 B
-- 44444 4 D
--------------------
-- Now just decrement the order of 4
declare @OldOrder INT = 4;
declare @NewOrder INT = @OldOrder - 1;
UPDATE @MyTable
SET [Order] = (CASE
WHEN
[Order] = @OldOrder
THEN
@NewOrder
WHEN
@NewOrder > @OldOrder
THEN
[Order] - 1
ELSE
[Order] + 1
END)
WHERE ([Order] BETWEEN @OldOrder AND @NewOrder OR [Order] BETWEEN @NewOrder AND @OldOrder)
select * from @MyTable;
--which will gives you
--------------------
--ID Order Name
--11111 1 A
--22222 2 B
--44444 3 D
--------------------
--The result should be
--------------------
--ID Order Name
--11111 1 A
--22222 3 B
--44444 2 D
--------------------
將「44444」作爲「2號訂單」和「22222」訂在「3號訂單」上的標準是什麼? – Edper
如果你解釋邏輯是什麼,那麼我將用解決方案更新我的答案......目前,我只能指出這個問題。 – christiandev
@christiandev,只是一個簡單的表格,我在這裏指定1,2,3的順序,等等。現在用戶可以隨時重新排序和刪除任何行。 – user960567