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

Como excluir linhas em tabelas que contêm chaves estrangeiras para outras tabelas


Primeiro, como um exercício de limpeza de dados único, exclua as linhas órfãs, por exemplo
DELETE 
  FROM ReferencingTable 
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM MainTable AS T1
                    WHERE T1.pk_col_1 = ReferencingTable.pk_col_1
                  );

Segundo, como um exercício de alteração de esquema único, adicione o ON DELETE CASCADE ação referencial para a chave estrangeira na tabela de referência, por exemplo
ALTER TABLE ReferencingTable DROP 
   CONSTRAINT fk__ReferencingTable__MainTable;

ALTER TABLE ReferencingTable ADD 
   CONSTRAINT fk__ReferencingTable__MainTable 
      FOREIGN KEY (pk_col_1)
      REFERENCES MainTable (pk_col_1)
      ON DELETE CASCADE;

Então, para sempre, as linhas nas tabelas de referência serão excluídas automaticamente quando a linha referenciada for excluída.