Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment supprimer des lignes dans des tables contenant des clés étrangères vers d'autres tables

Tout d'abord, en tant qu'exercice ponctuel de nettoyage des données, supprimez les lignes orphelines, par ex.

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

Deuxièmement, en tant qu'exercice de modification de schéma unique, ajoutez le ON DELETE CASCADE action référentielle sur la clé étrangère de la table de référence, par ex.

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;

Ensuite, pour toujours, les lignes des tables de référence seront automatiquement supprimées lorsque leur ligne référencée sera supprimée.