在人力资源管理系统中,常常会有通过工号查找其所在部门主管的需求,但员工所在部门不一定有主管,可能要在上级才有,这时就需要用递归的方式将其主管找出来,MSSQL代码:
/*
功能:取得指定部门代码的部门负责人
创建人:baronyang
创建时间:2008-12-23
*/
CREATE FUNCTION [dbo].[Fn_GetDepManager]
(@DepCode varchar(30))
RETURNS varchar(30)
as
BEGIN
declare @PersonCode varchar(230),@ParentID int
IF Exists(select 1 from cs_department(nolock) where DepCode=@DepCode)
Begin
select @ParentID=[ParentID],@PersonCode=isnull(PersonCode,'') from cs_department(nolock) where DepCode=@DepCode
IF Isnull(@PersonCode,'')=''
Begin
select @DepCode=DepCode from cs_department(nolock) where [ID]=@ParentID
set @PersonCode=dbo.Fn_GetDepManager(@DepCode)
End
End
RETURN @PersonCode
END
还有部门的架构是多级时,需要将每一级的部门名称显示出来,也需要递归,mssql代码:
/*
功能:取得指定部门代码的上级组织
创建人:baronyang
创建时间:2008-10-21
*/
Create FUNCTION dbo.Fn_ShowDepTree
(@DepCode varchar(20))
RETURNS varchar(500)
as
BEGIN
declare @Department varchar(500),@DepName varchar(50),@ParentID int
select @DepName='',@Department=''
select @ParentID=[ParentID],@DepName=Department,@DepCode=DepCode from cs_department where DepCode=@DepCode
if @Department=''
set @Department=@DepName
else
set @Department=@DepName+'/'+@Department
if (@ParentID>0)
begin
select @DepCode=DepCode from cs_department where [ID]=@ParentID
set @Department=dbo.Fn_ShowDepTree(@DepCode)+'/'+@Department
end
RETURN @Department
END