【发布时间】:2013-04-14 19:45:14
【问题描述】:
想象一下,我想通过将菜单项的顺序替换为下一项或上一项来重新排序(更改位置或顺序)。为此,我使用如下代码:
DECLARE @SO tinyint --, @MenuID uniqueidentifier
--SET @MenuID = (Select top 1 MenuID from MenuItems where MenuItemID = @ID)
SET @SO = (Select top 1 SO from MenuItems where MenuItemID = @ID and MenuID = @MenuID)
if @SO > 1
begin
UPDATE dbo.MenuItems SET SO = @SO WHERE MenuItemID = (select top 1 MenuItemID from MenuItems WHERE SO = @SO - 1 and MenuID = @MenuID)
UPDATE dbo.MenuItems SET SO = @SO - 1 WHERE MenuItemID = @ID
END
此代码每次向上或向下移动一次都可以正常工作。我有两个问题:
- 有更好的解决方案吗?
- 如果我想同时将一些项目移动到更高或更低的一些步骤,如下所示:?
发件人:
> 1
> 2
> 1
> 2
> 3
> 3
> 4
> a
> b
> 5
收件人:
> 1
> 2
> 1
> 2
? a
? 5
> 3
> 3
> 4
> b
谢谢, 卡多
【问题讨论】:
标签: sql-server tsql hierarchy