sql >> Database teknologi >  >> RDS >> Sqlserver

Selvhenvisende fremmednøgle-begrænsninger og slet

I modsætning til Andomar ville jeg være glad for at bruge en trigger - men jeg ville ikke fjerne begrænsningskontrollen. Hvis du implementerer det som en instead of trigger, kan du nulstille de andre rækker til null, før du udfører den faktiske sletning:

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)

Det er kort, det er kortfattet, det ville ikke være nødvendigt, hvis SQL Server kunne håndtere fremmednøglekaskader til den samme tabel (i andre RDBMS'er kan du muligvis bare angive ON DELETE SET NULL for den fremmede nøgle-begrænsning, YMMV).



  1. Skrivning af rekursiv CTE ved hjælp af Entity Framework Fluent syntaks eller Inline syntaks

  2. Et kig på Oracle Group-by Bug

  3. PostgreSQL pg_dump

  4. MySQL betinget ORDER BY ASC/DESC for datokolonnen