Я пишу хранимую процедуру для получения структуры 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]
Где ParentMenuId и MenuId связаны. Некоторые другие сомнения, которые я получил, ниже
- Это прекрасно для использования
CTE
для меню. Какие другие типы вы были успешными
DataSet
и ChildRelations
тоже хороши (или, может быть, я ошибаюсь) для этой цели?
Дайте мне больше идей о том, как вы достигли системы меню в ваших проектах.
Input
MenuId MenuName ApplicationId ParentMenuId
1 MenuName1 1 -1
2 MenuName2 1 1
3 MenuName3 1 -1
4 MenuName4 1 2
выход
<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>
Не обращайте внимания на структуру xml, которую легко получить с помощью FOR XML PATH
Во-первых, я не запускаю запрос.