【发布时间】: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