CTE 的结果存储在变量表名@tbl 中。
我想通过 MenuItemID、ParentID (PID) 和 MenuID 设置 MenuItems 的 Order (SO)。为此,我尝试使用光标,但它太复杂了,我无法弄清楚。
编辑: 事实上,样本数据的 SO(顺序)不是按顺序排列的,因为它们应该是连续的。我想按照层次结构和当前的 SO 重新设置它们的顺序:
当前 SO(不连续):
1 5 2 9 10 6 7
更正:
1 2 1 2 3 3 4
> 1
> 2
> 1
> 2
> 3
> 3
> 4
@tbl 内容:
MenuItemID ParentID MenuID SO Level
D3B92D1B-7AFA-4E11-AF01-9F6A00B1B2A9 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 1 0
F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 5 0
5C2AC1F8-DEE0-448B-B538-A19600F0839B C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 6 0
3A1096E7-5FD2-4F77-9729-A19600973BDF C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 7 0
EBB5FFF0-4407-436B-BCE8-A1A0010A1A88 F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 2 1
45077C15-3A47-43E2-92A1-A19C013C2D9C F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 9 1
9DDB77B9-C9E8-48AF-8F1E-A1960097329A F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 10 1
我想要的结果是这样的:
(菜单项应按级别排序,SO(排序顺序))
MenuItemID ParentID MenuID SO Level
D3B92D1B-7AFA-4E11-AF01-9F6A00B1B2A9 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 1 0
F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 2 0
EBB5FFF0-4407-436B-BCE8-A1A0010A1A88 F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 1 1
45077C15-3A47-43E2-92A1-A19C013C2D9C F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 2 1
9DDB77B9-C9E8-48AF-8F1E-A1960097329A F5833F72-A739-47D6-B30C-A19600F03E91 C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 3 1
5C2AC1F8-DEE0-448B-B538-A19600F0839B C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 3 0
3A1096E7-5FD2-4F77-9729-A19600973BDF C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E C0489C0C-18C7-4D9A-8FC2-A19A00CDB99E 4 0
我要使用的光标是这样的,但我不知道如何处理它:
declare @id uniqueidentifier
declare cur CURSOR LOCAL for
SELECT MenuItemID FROM @tbl order by lvl
open cur
fetch next from cur into @id
while @@FETCH_STATUS = 0 BEGIN
???
fetch next from cur into @id
end
close cur
deallocate cur
这是表(@tbl)结构:
declare @tbl table (MenuItemID uniqueidentifier, PID uniqueidentifier, MenuID uniqueidentifier, SO tinyint, lvl tinyint)
如果有人帮助我,我将不胜感激。
提前致谢,
卡多