logo

SQL2008使用SQL语句实现无限级的递归查询结果

时间:2012-1-10 11:29:13 来源:原创 作者:dodo

讲一下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)

标签:
100%

回复:SQL2008使用SQL语句实现无限级的递归查询结果

0 / 5000