【问题标题】:Procedure deleting related rows删除相关行的过程
【发布时间】:2017-05-10 08:05:53
【问题描述】:

我想实现从 3 个相关表中删除行的过程。

我有桌子、A、B 和 C。

Table A
ID

Table B
ID
tableAId

Table C
ID
tablceBId

关系表 A - B 是一对多,关系 B - C 是一对多。

现在我想实现一个过程,该过程将删除与表 A 相关的所有行。我不想在级联上进行这些删除。我可以在一个查询中实现这一点吗?

我在表 A 中传递行 ID。

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:
    CREATE PROCEDURE delTableA
    @tableA_ID int
    AS
    BEGIN
        DELETE C
        FROM C
        INNER JOIN B ON C.ID = B.tableCId
        INNER JOIN A ON B.ID = A.tableBId
        WHERE A.ID = @tableA_ID
    
        DELETE B
        FROM B
        INNER JOIN A ON B.ID = A.tableBId 
        WHERE A.ID = @tableA_ID
    
        DELETE FROM A
        WHERE A.ID = @tableA_ID
    END
    GO
    

    如,

    CREATE TABLE C (ID int)
    CREATE TABLE B (ID int, tableCId int)
    CREATE TABLE A (ID int, tableBId int)
    GO
    INSERT INTO c VALUES (1)
    INSERT INTO b VALUES (1, 1)
    INSERT INTO a VALUES (1, 1) 
    GO
    
    CREATE PROCEDURE delTableA
    @tableA_ID int
    AS
    BEGIN
        DELETE C
        FROM C
        INNER JOIN B ON C.ID = B.tableCId
        INNER JOIN A ON B.ID = A.tableBId
        WHERE A.ID = @tableA_ID
    
        DELETE B
        FROM B
        INNER JOIN A ON B.ID = A.tableBId 
        WHERE A.ID = @tableA_ID
    
        DELETE FROM A
        WHERE A.ID = @tableA_ID
    END
    GO
    EXEC delTableA 1
    GO
    

    如果你运行这个查询,所有的都是空的:

    select * from A
    select * from B
    select * from C
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2011-10-12
      • 2011-12-07
      • 1970-01-01
      • 2019-11-14
      相关资源
      最近更新 更多