生活中有很多东西是有级别的,比如树的分支,它可以有自己的父节点也可以有子节点。
创建文件夹的时候,可以在其中创建子文件夹,子文件夹有可以创建子文件夹。。。
像这一类事物都可以不断的分下去,但是在一些业务开发中却需要对此进行分级。
例如:有
---------------------------------------------
1级目录a
2级目录c
3级目录d
4级目录e
1级目录b
----------------------------------------------
当要求找出层次小于三的目录时,你就需要根据目录间的关系一层层的数到第第三层为目录d,那么在它之前的目录都是 目录a、目录c、目录d、目录b
这时你可以清晰的从上面的图中找出来,但是实际项目中数据都不可能这样很有层次的列出来,用这么多空格是很浪费存储空间的,
一般都是如下图存储在数据库中的,一眼望下去并不能很快的找得到,况且数据量大的情况下就更麻烦,那么问题来了怎样快速找到指定级别目录呢?
Directory表
这里利用临时表写了个存储过程
--创建存储过程
create proc myproc
@level int
as
--创建临时表
create table #tmp_table(id int,level int)
declare @levelvalue int
set @levelvalue=0
insert #tmp_table select 0,@levelvalue
--将数据写入到临时表
while @@ROWCOUNT>0
begin
set @levelvalue=@levelvalue+1
insert #tmp_table select a.DirectoryID,@levelvalue
from Directory as a,#tmp_table as b
where a.DirectoryParentID=b.id and b.level=@levelvalue-1
end
select a.*
from Directory as a join #tmp_table as b on a.DirectoryID=b.id
where b.level>0 and b.level<=@level
go
执行存储过程传入参数3