Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Selbstreferenzierende Fremdschlüsseleinschränkungen und löschen

Im Gegensatz zu Andomar würde ich gerne einen Trigger verwenden - aber ich würde die Einschränkungsprüfung nicht entfernen. Wenn Sie es als instead of implementieren auslösen, können Sie die anderen Zeilen auf null zurücksetzen, bevor Sie den eigentlichen Löschvorgang ausführen:

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)

Es ist kurz, es ist prägnant, es wäre nicht notwendig, wenn SQL Server Fremdschlüsselkaskaden an dieselbe Tabelle verarbeiten könnte (in anderen RDBMS können Sie möglicherweise einfach ON DELETE SET NULL angeben). für die Fremdschlüsseleinschränkung YMMV).