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

Vincoli di chiave esterna autoreferenziati ed eliminazione

A differenza di Andomar, sarei felice di usare un trigger, ma non rimuoverei il controllo dei vincoli. Se lo implementi come instead of trigger, puoi reimpostare le altre righe su null prima di eseguire l'eliminazione effettiva:

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)

È breve, è conciso, non sarebbe necessario se SQL Server potesse gestire cascate di chiavi esterne nella stessa tabella (in altri RDBMS', potresti essere in grado di specificare semplicemente ON DELETE SET NULL per il vincolo di chiave esterna, YMMV).