【问题标题】:Get the count for deleted records when using cascade delete constraint使用级联删除约束时获取已删除记录的计数
【发布时间】:2020-09-02 04:08:14
【问题描述】:

当使用 ON DELETE CASCADE 约束并删除“主”记录时,是否有办法获取删除的“子”记录的计数?

例如使用这些表:

CREATE TABLE Master ( ID INT PRIMARY KEY (ID))
GO

CREATE TABLE Child ( ID INT, MasterID INT)
GO

ALTER TABLE Child ADD CONSTRAINT FK_Child_Master FOREIGN KEY(MasterID)
REFERENCES Master (ID)
ON DELETE CASCADE
GO

INSERT INTO Master (ID) VALUES (1);

INSERT INTO Child ( ID, MasterID) VALUES (1,1),(2,1),(3,1),(4,1),(5,1);

现在如果我像这样删除主记录:

DELETE FROM Master WHERE ID = 1;

SELECT @@ROWCOUNT;

Child表中的5行和Master表中的1行都被删除但结果为1。它只计算从主表中删除的记录。

有没有办法捕获从子表中删除的行数,还是我需要先从子表中删除,获取计数,然后从主表中删除?

【问题讨论】:

  • 这些可能与您的要求略有不同,但也可能有所帮助:stackoverflow.com/a/14440045/1024832, stackoverflow.com/questions/56542158/…
  • @Marc 尽管用户标记了 SQL Server,而不是 Oracle。
  • 简短回答是否定的。稍微长一点的答案是 - 不要假设有一个子表会受到影响。如果您确实假设了这一点,那么您最好对删除过程负责,而不是将其交给数据库引擎。

标签: sql sql-server


【解决方案1】:

是的,您可以使用存储过程来执行此操作

create procedure spDeleteRecords
@id int
begin
    select count(*) from child_table where id=@id
    delete from parent_table where id=@id
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 2019-12-24
    • 1970-01-01
    • 2012-05-08
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多