U kunt in dit voorbeeld profiteren van de "verwijderde" pseudo-tabel. Iets als:
begin transaction;
declare @deletedIds table ( id int );
delete from t1
output deleted.id into @deletedIds
from table1 as t1
inner join table2 as t2
on t2.id = t1.id
inner join table3 as t3
on t3.id = t2.id;
delete from t2
from table2 as t2
inner join @deletedIds as d
on d.id = t2.id;
delete from t3
from table3 as t3 ...
commit transaction;
Uiteraard kunt u een 'uitvoer verwijderd' doen. ook bij de tweede verwijdering, als je iets nodig hebt om aan de derde tafel mee te doen.
Even terzijde:je kunt ook insert.* doen op een insert-instructie, en zowel insert.* als verwijderd.* op een update-instructie.
BEWERKEN: Heb je ook overwogen om een trigger toe te voegen aan table1 om uit table2 + 3 te verwijderen? U bevindt zich in een impliciete transactie en heeft ook de "inserted." en "deleted. " pseudo-tabellen beschikbaar.