sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo elimino de varias tablas usando INNER JOIN en el servidor SQL?

Puede aprovechar la pseudo tabla "eliminada" en este ejemplo. Algo como:

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;

Obviamente puedes hacer una 'salida eliminada'. en la segunda eliminación también, si necesita algo para unirse a la tercera mesa.

Como nota al margen, también puede insertar.* en una declaración de inserción, y tanto insertar.* como eliminar.* en una declaración de actualización.

EDITAR: Además, ¿ha considerado agregar un disparador en la tabla 1 para eliminar de la tabla 2 + 3? Estará dentro de una transacción implícita y también tendrá "inserted." y "deleted. " pseudo-tablas disponibles.