【问题标题】:Delete Records from a table recursively - SQL Server 2008递归地从表中删除记录 - SQL Server 2008
【发布时间】:2018-03-15 18:35:21
【问题描述】:

表结构

ID       DESC             PARENT_ID**

35151    Parent            35154
35152    System            35151
35153    Same as System    35151
35154    ParentsParent     35157
35156    Product           35157
35157    Login Group       35159

在哪里

id为主键,parent_id为同一张表引用的外键

如何递归地删除记录,从最后一个孩子到父母。如果没有子记录,则应删除父记录。如果发生奇怪的事情,我需要使用事务回滚。

【问题讨论】:

    标签: .net sql sql-server


    【解决方案1】:

    您可以使用递归 CTE 来获取要删除的列表。

    https://data.stackexchange.com/stackoverflow/query/9287/so3466713

    -- SO3466713
    
    CREATE TABLE #t (
        ID int NOT NULL
        ,[DESC] varchar(50) NOT NULL
        ,PARENT_ID int NULL
    )
    
    INSERT INTO #t VALUES
    (35151, 'Parent', 35154)
    ,(35152, 'System', 35151)
    ,(35153, 'Same as System', 35151)
    ,(35154, 'ParentsParent', 35157)
    ,(35156, 'Product', 35157)
    ,(35157, 'Login Group', 35159)
    
    ;WITH tree AS (
        SELECT *
        FROM #t
        WHERE [DESC] = 'Parent'
    
        UNION ALL
    
        SELECT c.*
        FROM #t AS c
        INNER JOIN tree AS p
            ON c.PARENT_ID = p.ID
    )
    -- SELECT *
    -- FROM tree
    DELETE FROM #t WHERE ID IN (SELECT ID FROM tree)
    
    SELECT * FROM #t​
    

    【讨论】:

    • 描述只是一个文本。请忽略它。重要的是 ID 和 ParentId。
    • @Sunil Ramu - [DESC] 仅用于标识您要删除的树。您可以放置​​任何您想要识别需要从中删除所有子节点的根节点的标准。
    【解决方案2】:

    看看这个问题:

    SQL Server: Self-reference FK, trigger instead of ON DELETE CASCADE

    带有 ON DELETE CASCADE 的 FK 在 SQL Express 2005 中不起作用,可能会在 2008 中起作用

    ALTER TABLE SomeChildTable 
    CONSTRAINT YOurConstraintName 
    FOREIGN KEY (YourParentId)
    REFERENCES YourParentTable(ParentTableId) ON DELETE CASCADE;
    

    【讨论】:

    • 我现在不能使用触发器。不用触发器可以吗?
    • @Sunil Ramu,我已经更新了答案,但是它不能在 MSSQL 中工作,但请尝试。
    猜你喜欢
    • 2013-07-25
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多