Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je supprimer de plusieurs tables à l'aide de INNER JOIN dans SQL Server

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.