Du kan dra fördel av den "borttagna" pseudotabellen i det här exemplet. Något i stil med:
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;
Självklart kan du göra en "utdata raderad." på den andra raderingen också, om du behövde något att gå med på för det tredje bordet.
Som en sidoanteckning kan du också göra inserted.* på en insert-sats, och både insert.* och deleted.* på en update-sats.
EDIT: Har du också funderat på att lägga till en trigger på tabell1 för att radera från tabell2 + 3? Du kommer att vara inne i en implicit transaktion och kommer också att få "infogad." och "raderad. " pseudo-tabeller tillgängliga.