sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo eliminar filas en tablas que contienen claves externas a otras tablas

En primer lugar, como ejercicio único de depuración de datos, elimine las filas huérfanas, p.

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

En segundo lugar, como un ejercicio único de alteración del esquema, agregue ON DELETE CASCADE acción referencial a la clave externa en la tabla de referencia, p.

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;

Luego, para siempre, las filas en las tablas de referencia se eliminarán automáticamente cuando se elimine la fila a la que se hace referencia.