树状职位图,获取指定职位的所有下级职位和级别

创建了一个名为[dbo].[Get_SubPositions]的函数,输入参数为@PositionID。该函数返回一个包含所有下级职位及其级别的表。首先,将根节点插入临时表@Subs,然后通过while循环递归地查找并插入下级职位,每次循环增加层级计数。使用内连接定位直接下级职位,并确保不包含自身作为父级。
摘要由CSDN通过智能技术生成

create  function [dbo].[Get_SubPositions](@PositionID int)
returns @Subs Table
(
   PositionID int not null primary key,
   [Level] int not null
)
as
begin
    declare @Level as int;
     set @Level=0;
   
    --向临时表@Sub中插入根节点
    insert into @Subs(PositionID,[Level])
           select PositionID, @Level from Position where PositionID=@PositionID

    --当存在下级职位时,与临时表链接,设置计数器,筛选直接下级职位,最终临时表中获得所有下级职位
    while @@rowcount>0
    begin
       set @Level=@Level+1; --设置计数器,表示下级下属的级别
      
       insert into @Subs(PositionID,[Level])
              select  p.PositionID,@Level
              from @Subs as s  --父级职位
                   inner join Position p --子级职位
                on s.PositionID=p.ParentID
                and  s.Level=@Level-1   --计算父级职位的级别
                and p.PositionID<>p.ParentID
    end
    return;
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值