Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como faço para excluir de várias tabelas usando INNER JOIN no SQL server


Você pode aproveitar a pseudotabela "excluída" neste exemplo. 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, você pode fazer uma 'saída excluída'. na segunda exclusão também, se você precisasse de algo para se juntar à terceira mesa.

Como uma observação lateral, você também pode inserir.* em uma instrução insert e inserir.* e delete.* em uma instrução de atualização.

EDITAR: Além disso, você considerou adicionar um gatilho na tabela1 para excluir da tabela2 + 3? Você estará dentro de uma transação implícita e também terá o "inserido." e "excluído. " pseudo-tabelas disponíveis.