今天做一个权限菜单。要获取树形结构下面的所有节点。
想到的思路有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