讲一下SQL实现递归查询功能:
表结构:
SELECT [MenuID] --ID
,[ParentMenuID] --父ID
,[MenuName] --名称
FROM [MenuFunctionList]
实现递归的SQL:
WITH LVLMenu([MenuID],[MenuName],[ParentMenuID],Sublevel)
AS (SELECT [MenuID],[MenuName],[ParentMenuID],0 Sublevel
FROM [MenuFunctionList]
WHERE [MenuID] = 56
UNION ALL
SELECT p.[MenuID],p.[MenuName],p.[ParentMenuID],Sublevel+1
FROM [MenuFunctionList] P
JOIN LVLMenu a
ON P.[MenuID] = A.[ParentMenuID])
--将多个递归结果组成一个字符串
SELECT Stuff((SELECT '\' + Cast([MenuID] AS VARCHAR(20)) + '|' + [MenuName]
FROM LVLMenu
ORDER BY Sublevel desc
FOR XML PATH('')), 1, 1, '')
--直接查询递归结果
SELECT *
FROM LVLMenu option(maxrecursion 0)
收藏本站 设为主页

