Reputation: 1015
I want to implement procedure that will delete rows from 3 related table.
I have table, A, B, and C.
Table A
ID
Table B
ID
tableAId
Table C
ID
tablceBId
relation table A - B is one to many and relation B - C is one to many.
Now I want to implement a procedure that would delete all rows that are related with Table A. I do not want to make these delete on the cascade. Can I achieve this in one query?
I pass ID of row in Table A.
Upvotes: 0
Views: 52
Reputation: 4334
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
As in,
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
If you run this query, all are empty:
select * from A
select * from B
select * from C
Upvotes: 1