sql >> Base de Datos >  >> RDS >> Sqlserver

Restricciones de clave foránea autorreferenciadas y eliminación

A diferencia de Andomar, estaría feliz de usar un disparador, pero no eliminaría la verificación de restricciones. Si lo implementa como instead of disparador, puede restablecer las otras filas a nulo antes de realizar la eliminación real:

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 breve, es sucinto, no sería necesario si SQL Server pudiera manejar cascadas de claves foráneas en la misma tabla (en otros RDBMS, puede especificar ON DELETE SET NULL para la restricción de clave externa, YMMV).