Sql Server 2005 使用 With 递归查询
表中存放的是后台系统的功能模块信息,ModuleID表示模块的编号、MoudleName表示模块名、ModuleFather表示模块的父级编号(如果为0则表示自己是最高级的)。 现在我们要查询出OA管理的所有子模块(不限级)。 由SQL语句如下。
WITH
AS
(
SELECT ModuleId,ModuleName,ModuleFather,ModuleSort
FROM dbo.Module
WHERE ModuleId=1
UNION ALL
SELECT m.ModuleId,m.ModuleName,m.ModuleFather,m.ModuleSort
FROM dbo.Module m
INNER JOIN Modules a
ON a.ModuleId=m.ModuleFather
)
SELECT m.ModuleId,m.ModuleName,m.ModuleFather,m.ModuleSort
FROM Modules m
INNER JOIN dbo.Module mod
ON m.ModuleFather=mod.ModuleId