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

Como excluir todas as linhas dependentes


Se você não tem permissão para modificar as tabelas, você pode dar uma olhada no EXISTS operador.
Permitirá que você exclua linhas de uma tabela somente se a consulta dentro do EXISTS retornar pelo menos 1 resultado. Você pode usá-lo para verificar dependências.

Você pode escrever 3 consultas:
DELETE C c
WHERE EXISTS (SELECT 1
              FROM B b
              WHERE c.b = b.b
              AND EXISTS (SELECT 1
                          FROM A a
                          WHERE a.a = b.a
                          AND ... ));
DELETE B b
WHERE EXISTS (SELECT 1
              FROM A a
              WHERE a.a = b.a
              AND ...);

DELETE A a
WHERE ...

O primeiro cuidará do registro em C que referencia registros em B que referencia registros em A que você deseja excluir.
Então você pode remover registros de B já que não há mais dependências em C .
Finalmente, você pode excluir registros de A usando a mesma lógica.