今天做一个权限菜单。要获取树形结构下面的所有节点。
想到的思路有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
本文介绍了一种使用SQL存储过程来获取树形结构中所有子节点的方法,包括节点自身。通过递归公用表表达式(CTE)实现高效查询。
606

被折叠的 条评论
为什么被折叠?



