Ecology9 组织权限 查询所有上级部门ID

查询所有上级部门(SQLServer2012)

WITH TEMP
     AS (SELECT Id,
                departmentName,
                supdepid
         FROM   hrmdepartment
         WHERE  Id = 935
         UNION ALL
         SELECT B.Id,
                B.departmentName,
                B.supdepid
         FROM   TEMP A
                INNER JOIN hrmdepartment B
                        ON B.Id = A.supdepid)
SELECT Id,
       departmentName,
       supdepid
FROM   TEMP

自定义函数 - 查询所有上级部门ID(SQLServer2012)

CREATE FUNCTION CF_GET_ALL_SUPDEPTID (
	@deptId INT
)
RETURNS VARCHAR(100)
AS
BEGIN

	DECLARE @id INT, @name VARCHAR(100), @supid INT
	DECLARE @cur CURSOR
	DECLARE @ret VARCHAR(100)
	
	SET @ret = ''
	SET @cur = CURSOR FOR WITH TEMP AS (
			SELECT ID, SUPDEPID FROM HRMDEPARTMENT WHERE ID=@deptId
			UNION ALL
			SELECT B.ID, B.SUPDEPID FROM TEMP A
			 INNER JOIN HRMDEPARTMENT B ON B.ID=A.SUPDEPID)
		SELECT ID FROM TEMP
		
	OPEN @cur
	FETCH NEXT FROM @cur INTO @id
	WHILE @@FETCH_STATUS = 0
		BEGIN
			SET @ret = CAST(@ret AS VARCHAR) + ',' + CAST(@id AS VARCHAR)
			FETCH NEXT FROM @cur INTO @id
		END
	CLOSE @cur
	DEALLOCATE @cur
	
	IF @ret <> ''
	BEGIN
		SET @ret = SUBSTRING(@ret, 2, LEN(@ret))
	END
	
	RETURN @ret
	
END

调用

SELECT DBO.CF_GET_ALL_SUPDEPTID(984)

-- 返回结果
-- 984,953,906,1142
-- 其中第一个值:948是本部门ID,其他都是上级部门ID
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值