Vous pouvez profiter de la pseudo table "supprimée" dans cet exemple. Quelque chose comme :
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;
Évidemment, vous pouvez faire une "sortie supprimée". sur la deuxième suppression également, si vous aviez besoin de quelque chose pour vous joindre à la troisième table.
En passant, vous pouvez également faire insert.* sur une instruction d'insertion, et insert.* et delete.* sur une instruction de mise à jour.
MODIF : Aussi, avez-vous envisagé d'ajouter un déclencheur sur table1 pour supprimer de table2 + 3 ? Vous serez à l'intérieur d'une transaction implicite, et aurez également le "insert." et "deleted. " pseudo-tables disponibles.