sql函式:
alter function [dbo].[fn_getchildren]
( @bmsno varchar(20), --0=第一級取公司,否則傳入乙個部門編號
@jibie int=-1, --目前共 n 級,0=公司、1=事業部、···,-1=全部
@type int=0 --層級(0=下級(多級),1=自身加下級(多級),2=下級崗位(多級,不含下級部門下的崗位),3=下級崗位(多級,含下級部門的所有崗位+本部門的自身以下的崗位))
)returns
@return table
( id varchar(20), --編碼
mingcheng nvarchar(20) --名稱)as
begin
if(@bmsno='0')
begin
insert into @return (id, mingcheng)
select id, mingcheng from dbo.table where 條件
return;
endif(@type=0 and @jibie=-1)
begin
--遞迴取出所有下級部門
with child as (
select id, mingcheng, shangjibmid from table where sno=@bmsno
union all
select a.id, a.mingcheng, a.shangjibmid from table a, child b where a.shangjibmid =b.id
) insert into @return (id, mingcheng) select id, mingcheng from child;
endreturn;
end
呼叫方法:
select id into #bmdb from dbo.fn_getchildren(@bmsno,default,default)
select id,··· from table
where (@bmsno = '' or bm.id in (select * from #bmdb))
專案中使用時,蒐集資料所完善。希望能夠幫助大家!! 根據子節點遞迴查詢所有父節點
有個需求,需要根據給定的子節點向上遞迴查詢所有父節點,網上查詢了一些,但是都不是很滿意,有的是需要用到全域性變數定義儲存列表,但是會有併發問題,然後自己手寫乙個 test void contextloads1 public listgetpid listidlist,integer pid,list...
查詢指定節點的所有父節點的示例函式 sql
create function f pid id char 3 returns t level table id char 3 level int asbegin declare level int set level 1 insert t level select id,level while r...
MySQL中根據父節點查詢其所有子節點
drop function if exists fun get children delimiter create definer root 127.0.0.1 function fun get children i id int 32 returns varchar 20000 charset u...