Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So löschen Sie Zeilen in Tabellen, die Fremdschlüssel zu anderen Tabellen enthalten

Löschen Sie zunächst als einmalige Datenbereinigungsübung die verwaisten Zeilen, z.

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

Zweitens fügen Sie als einmalige Schemaänderungsübung den ON DELETE CASCADE hinzu referenzielle Aktion auf den Fremdschlüssel auf der referenzierenden Tabelle, z.

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;

Dann werden Zeilen in den referenzierenden Tabellen für immer automatisch gelöscht, wenn ihre referenzierte Zeile gelöscht wird.