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

Самореферентни ограничения на външен ключ и изтриване

За разлика от Andomar, бих се радвал да използвам тригер - но не бих премахнал проверката на ограниченията. Ако го внедрите като instead of тригер, можете да нулирате другите редове до null, преди да извършите действителното изтриване:

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)

Кратко е, сбито е, не би било необходимо, ако SQL Server можеше да обработва каскади от външни ключове към същата таблица (в други RDBMS' може просто да укажете ON DELETE SET NULL за ограничението на външния ключ, 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. Неуспешна JDBC връзка, грешка:TCP/IP връзката с хост неуспешна

  2. Как да накарам разширението SQLSRV да работи с PHP, тъй като MSSQL е отхвърлен?

  3. Добавете препратка към dll на трета страна в компонента на ssis скрипт

  4. Получаване на текущата дата в SQL Server?

  5. Проверката за стойност на първичен ключ преди вмъкване по-бърза ли е от използването на try-catch?