Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Samoodnoszące się ograniczenia klucza obcego i usuwanie

W przeciwieństwie do Andomara, byłbym szczęśliwy używając wyzwalacza - ale nie usuwałbym sprawdzania ograniczeń. Jeśli zaimplementujesz go jako instead of wyzwalacz, możesz zresetować inne wiersze do wartości null przed wykonaniem faktycznego usunięcia:

CREATE TRIGGER T_tabData_D
on tabData
instead of delete
as
    set nocount on
    update tabData set fiData = null where fiData in (select idData from deleted)
    delete from tabData where idData in (select idData from deleted)

Jest krótki, zwięzły, nie byłoby konieczne, gdyby SQL Server mógł obsługiwać kaskady kluczy obcych do tej samej tabeli (w innych RDBMS'ach możesz po prostu określić ON DELETE SET NULL dla ograniczenia klucza obcego, YMMV).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizowałem sterownik ODBC programu SQL Server i negatywnie wpłynęło to na wydajność. Co mogę zrobić?

  2. Używanie parametru wyjściowego z procedury składowanej SQL Server w programie Access

  3. SQL:funkcja ISNULL z różnymi typami parametrów

  4. Importuj/eksportuj bazę danych za pomocą SQL Server Server Management Studio

  5. Jak uzyskać przesunięcie strefy czasowej od nazwy strefy czasowej?