sql >> Databáze >  >> RDS >> Sqlserver

Omezení cizího klíče s vlastním odkazem a odstranění

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).



  1. Která metoda je lepší pro ověření přihlašovacích údajů uživatele?

  2. Správné použití BoneCP

  3. Dotaz Oracle sql se musí změnit na základě časového pásma

  4. Podmíněné vložení MySQL na duplikát