您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Server-使用递归外键级联删除

SQL Server-使用递归外键级联删除

以下内容可能对您有用(我尚未测试过,因此可能需要进行一些调整)。似乎您要做的就是从层次结构的底部删除雇员,然后再删除较高的雇员。使用CTE递归地构建删除层次结构,并按雇员的层次结构级别排列CTE输出降序。然后按顺序删除

CREATE PROC usp_DeleteEmployeeAndSubordinates (@empId INT)
AS

;WITH employeesToDelete AS (
    SELECT  id, CAST(1 AS INT) AS empLevel
    FROM    employee
    WHERE   id = @empId
    UNION ALL
    SELECT  e.id, etd.empLevel + 1
    FROM    employee e
            JOIN employeesToDelete etd ON e.boss_id = etd.id AND e.boss_id != e.id
)
SELECT  id, ROW_NUMBER() OVER (ORDER BY empLevel DESC) Ord
INTO    #employeesToDelete
FROM    employeesToDelete;

DECLARE @current INT = 1, @max INT = @@ROWCOUNT;

WHILE @current <= @max
BEGIN
    DELETE employee WHERE id = (SELECT id FROM #employeesToDelete WHERE Ord = @current);
    SET @current = @current + 1;
END;
GO
SQLServer 2022/1/1 18:32:06 有459人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶