删除相关行的过程
Posted
技术标签:
【中文标题】删除相关行的过程【英文标题】: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。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于删除相关行的过程的主要内容,如果未能解决你的问题,请参考以下文章