Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eliminare le righe nelle tabelle che contengono chiavi esterne in altre tabelle

Innanzitutto, come esercizio di ripulitura dei dati una tantum, elimina le righe orfane, ad es.

DELETE 
  FROM ReferencingTable 
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM MainTable AS T1
                    WHERE T1.pk_col_1 = ReferencingTable.pk_col_1
                  );

In secondo luogo, come esercizio di modifica dello schema una tantum, aggiungi il ON DELETE CASCADE azione referenziale alla chiave esterna nella tabella di riferimento, ad es.

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;

Quindi, per sempre, le righe nelle tabelle di riferimento verranno automaticamente eliminate quando viene eliminata la riga di riferimento.