¿Cuál es la forma recomendada de manejar restricciones de clave externa autorreferenciadas en SQL-Server?Referenciar restricciones de clave externa y eliminar
Tabla-modelo:
fiData
referencia a un registro previo en tabData. Si elimino un registro al que hace referencia fiData
, la base de datos se produce una excepción:
"La instrucción DELETE en conflicto con la misma tabla de referencia restricción 'FK_tabDataPrev_tabDataNext'. Se ha producido el conflicto en base de datos 'MyDatabase', mesa "dbo.tabData", columna "fiData" "
si Enforce Foreignkey Constraint
está establecido en" Sí ".
No necesito eliminar en cascada los registros a los que se hace referencia, pero tendría que establecer fiData=NULL
donde se hace referencia. Mi idea es establecer Enforce Foreignkey Constraint
en "No" y crear un desencadenador de eliminación. ¿Es esto recomendable o hay mejores formas?
Gracias.
Gracias. Pero recibo una excepción al crear el disparador: "Los desencadenadores INSTEAD OF DELETE/UPDATE no se pueden definir en una tabla que tiene una clave externa con una cascada en acción DELETE/UPDATE definida". –
Sé que es demasiado tarde para comentar, pero para alguien que está buscando como yo. Esto solo borrará una entrada. no cascada en forma recursiva. – Arif
@Arif - esto fue "ON DELETE SET NULL", no "ON DELETE CASCADE". El primero nunca necesita recurse. Para "ON DELETE CASCADE", recomendaría un CTE que calcule el cierre de todos los valores de 'ID' primero, y luego realice la eliminación. –