Dee*_*ons 3 xml sql sql-server-2005
我正在编写一个存储过程来检索菜单控件的xml结构.这似乎是一个有效的代码(根据我和它是错误的)但在查询测试器上运行不佳.我怎么能纠正下面的错误是代码
;WITH Hierarchy AS
(
SELECT
MenUid,MenuName,ApplicationId,ParentMenuId, 1 AS 'Level'
FROM
dbo.Menu
WHERE
ParentMenuId = '-1'
UNION ALL
SELECT
M.MenUid,M.MenuName,M.ApplicationId,M.ParentMenuId, Level + 1 AS 'Level'
FROM
dbo.Menu M
INNER JOIN
Hierarchy h ON M.ParentMenuId = h.MenuId
)
SELECT *
FROM Hierarchy
ORDER BY [Level],[MenuName]
Run Code Online (Sandbox Code Playgroud)
ParentMenuId和MenuId相关的位置.我得到的其他一些疑问如下
CTE用于菜单.你有哪些其他类型的成功DataSet并且ChildRelations也很好(也许我错了)为了这个目的?给我更多关于如何在项目中完成菜单系统的想法.
MenuId MenuName ApplicationId ParentMenuId
1 MenuName1 1 -1
2 MenuName2 1 1
3 MenuName3 1 -1
4 MenuName4 1 2
Run Code Online (Sandbox Code Playgroud)
<Output>
<Menu>
<MenuId>1</MenuId>
<MenuName>MenuName1</MenuName>
<ApplicationId>1</ApplicationId>
<ParentMenuId>-1</ParentMenuId>
<SubMenu>
<Menu>
<MenuId>2</MenuId>
<MenuName>MenuName2</MenuName>
<ApplicationId>1</ApplicationId>
<ParentMenuId>1</ParentMenuId>
<SubMenu>
<MenuId>3</MenuId>
<MenuName>MenuName4</MenuName>
<ApplicationId>1</ApplicationId>
<ParentMenuId>3</ParentMenuId>
</SubMenu>
</Menu>
</SubMenu>
</Menu>
<Menu>
<MenuId>4</MenuId>
<MenuName>MenuName3</MenuName>
<ApplicationId>1</ApplicationId>
<ParentMenuId>-1</ParentMenuId>
</Menu>
</Output>
Run Code Online (Sandbox Code Playgroud)
不介意我很容易得到的xml结构我FOR XML PATH没有让查询首先运行.
我打赌那个
INNER JOIN
Hierarchy h ON M.ParentMenuId = h.ParentMenuId
Run Code Online (Sandbox Code Playgroud)
事实上应该是
INNER JOIN
Hierarchy h ON M.ParentMenuId = h.MenuId
Run Code Online (Sandbox Code Playgroud)
编辑
使用此示例数据:
declare @Menu table (
MenuId int,
MenuName nvarchar(20),
ApplicationId int,
ParentMenuId int
)
insert @Menu values
(1, 'Name1', 1, -1),
(2, 'Name2', 1, 1),
(3, 'Name3', 1, -1),
(4, 'Name4', 1, 2)
Run Code Online (Sandbox Code Playgroud)
和你的查询,通过上面的修改,我得到了
MenUid MenuName ApplicationId ParentMenuId Level
----------- -------------------- ------------- ------------ -----------
1 Name1 1 -1 1
3 Name3 1 -1 1
2 Name2 1 1 2
4 Name4 1 2 3
Run Code Online (Sandbox Code Playgroud)
看起来很正确.为了帮助您,我们需要查看您的所有相关代码.
| 归档时间: |
|
| 查看次数: |
2555 次 |
| 最近记录: |