Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да изтриете редове в таблици, които съдържат външни ключове към други таблици

Първо, като еднократно упражнение за почистване на данни, изтрийте осиротелите редове, напр.

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

Второ, като еднократно упражнение за промяна на схема, добавете ON DELETE CASCADE референтно действие към външния ключ на референтната таблица, напр.

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;

След това, завинаги, редовете в препращащите таблици автоматично ще бъдат изтрити, когато техният препратен ред бъде изтрит.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Представяме ви нова функция – анализ на безизходица

  2. Промяна на sql-сървър DB от табличен към многоизмерен

  3. Разберете типа данни на колоните, върнати в набор от резултати в SQL Server

  4. Връщане на всички чужди ключове и ПРОВЕРКА на ограничения в база данни на SQL Server (T-SQL примери)

  5. Как да изберете всеки ред, където стойността на колоната НЕ е различима