Na rozdíl od Andomaru bych rád použil spoušť - ale neodstranil bych kontrolu omezení. Pokud jej implementujete jako instead of
spouštěče, můžete před provedením skutečného odstranění resetovat ostatní řádky na hodnotu 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)
Je to krátké, je to stručné, nebylo by to nutné, kdyby SQL Server dokázal zpracovat kaskády cizích klíčů do stejné tabulky (v jiných RDBMS' můžete být schopni zadat pouze ON DELETE SET NULL
pro omezení cizího klíče YMMV).