Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come elimino da più tabelle utilizzando INNER JOIN nel server SQL

Puoi sfruttare la pseudo tabella "eliminata" in questo esempio. Qualcosa come:

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;

Ovviamente puoi fare un 'output cancellato.' anche al secondo elimina, se avevi bisogno di qualcosa su cui unirti per il terzo tavolo.

Come nota a margine, puoi anche inserire.* su una dichiarazione di inserimento, e sia inserito.* che cancellato.* su una dichiarazione di aggiornamento.

MODIFICA: Inoltre, hai considerato di aggiungere un trigger su table1 per eliminare da table2 + 3? Sarai all'interno di una transazione implicita e avrai anche "inserito." ed "eliminato. " pseudo-tabelle disponibili.