SQL中获取树形结构全部子级数据

今天作一个权限菜单。要获取树形结构下面的全部节点。sql

想到的思路有2种。c#

1.c#获取全部树的数据,而后递归处理性能

2.SQL里面就处理完blog

 

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

具体代码以下:it

/*
获取树形结构的全部子节点,包括本身自己
*/
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
相关文章
相关标签/搜索