SQL中获取树形结构所有子级数据

今天做一个权限菜单。要获取树形结构下面的所有节点。

想到的思路有2种。

1.c#获取所有树的数据,然后递归处理

2.SQL里面就处理完

 

最终还是考虑用SQL写存储过程处理。(数据量大Proc性能好)

具体代码如下:

/*
获取树形结构的所有子节点,包括自己本身
*/
ALTER proc [dbo].[SP_GetChirldsByParentId]
@IdValue nvarchar(20),
@TableName nvarchar(20),
@IdFiledName nvarchar(20),
@ParentFieldName nvarchar(20)
as
declare @sql nvarchar(800)
set @sql = 'with cte as
(
select '+@TableName+'.* from '+@TableName+' where '+@IdFiledName+' = @Id
union all
select a.* from '+@TableName+' a join cte b on a.'+@ParentFieldName+' = b.'+@IdFiledName+'
)
select * from cte'
print @sql
go
EXEC SP_EXECUTESQL @Sql, N'@Id NVARCHAR',@Id=@IdValue

  

posted @ 2015-09-28 16:25  hujunmin  阅读(2597)  评论(0编辑  收藏  举报