W tym przykładzie możesz skorzystać z „usuniętej” pseudotabeli. Coś takiego:
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;
Oczywiście możesz wykonać „wyjście usunięte”. przy drugim usuń również, jeśli potrzebujesz czegoś do przyłączenia się przy trzecim stole.
Na marginesie, możesz również wykonać insert.* na instrukcji INSERT oraz zarówno insert.*, jak i usunięty.* na instrukcji aktualizacji.
EDYTUJ: Czy rozważałeś dodanie wyzwalacza na table1 w celu usunięcia z table2 + 3? Wejdziesz w niejawną transakcję i będziesz mieć również „wstawione.” i „usunięte. " dostępne pseudotabele.