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;
END
IF(@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;
END
RETURN;
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))
项目中使用时,搜集资料所完善。希望能够帮助大家!!