In diesem Beispiel können Sie die „gelöschte“ Pseudotabelle nutzen. Etwas wie:
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;
Natürlich können Sie eine 'Ausgabe gelöscht' machen. beim zweiten auch löschen, wenn man etwas zum Mitmachen für den dritten Tisch braucht.
Als Nebenbemerkung können Sie auch inserted.* in einer insert-Anweisung und sowohl inserted.* als auch delete.* in einer update-Anweisung ausführen.
BEARBEITEN: Haben Sie auch darüber nachgedacht, einen Trigger für Tabelle1 hinzuzufügen, um aus Tabelle2 + 3 zu löschen? Sie befinden sich innerhalb einer impliziten Transaktion und haben auch „inserted.“ und „deleted. " Pseudotabellen verfügbar.