SQL 函式 查詢 父節點下所有子節點的資料值

2021-09-22 21:35:36 字數 1175 閱讀 1176

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...