Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie lösche ich aus mehreren Tabellen mit INNER JOIN in SQL Server

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.