В этом примере вы можете воспользоваться «удаленной» псевдо-таблицей. Что-то вроде:
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;
Очевидно, что вы можете сделать «вывод удален». на втором также удалите, если вам нужно что-то присоединиться к третьей таблице.
В качестве примечания вы также можете вставить. * В оператор вставки, а также вставить. * И удалить. * В оператор обновления.
EDIT:
Кроме того, вы рассматривали возможность добавления триггера на table1 для удаления из table2 + 3? Вы будете внутри неявной транзакции, и вам также будут доступны псевдотаблицы «вставлено. » и «удалено. ».