Tengo 2 tablas: T1 y T2, son tablas existentes con datos. Tenemos una relación de uno a muchos entre T1 y T2. ¿Cómo modifico las definiciones de tabla para realizar la eliminación en cascada en SQL Server cuando se elimina un registro de T1, también se eliminan todos los registros asociados en T2.
La restricción externa está en su lugar entre ellos. No quiero soltar las tablas o crear un disparador para hacer la eliminación de T2. Por ejemplo, cuando elimino a un empleado, todos los registros de revisión también deberían desaparecer.
T1 - Empleado,
Employee ID
Name
Status
T2 - Opiniones de rendimiento,
Employee ID - 2009 Review
Employee ID - 2010 Review
sql-server
cascading-deletes
Bichvan Nguyen
fuente
fuente
Para agregar "Eliminar en cascada" a una clave externa existente en SQL Server Management Studio:
Primero, seleccione su Clave externa y abra "DROP and Create To ..." en una nueva ventana de consulta.
Luego, solo agregue
ON DELETE CASCADE
alADD CONSTRAINT
comando:Y presiona el botón "Ejecutar" para ejecutar esta consulta.
Por cierto, para obtener una lista de sus claves externas y ver cuáles tienen activada la opción "Eliminar en cascada", puede ejecutar este script:
Y si alguna vez encuentra que no puede
DROP
una tabla en particular debido a una restricción de clave externa, pero no puede determinar qué FK está causando el problema, puede ejecutar este comando:El SQL en ese artículo enumera todos los FK que hacen referencia a una tabla en particular.
Espero que todo esto ayude.
Disculpas por el dedo largo. Solo estaba tratando de hacer un punto.
fuente
Puede hacer esto con SQL Server Management Studio.
→ Haga clic con el botón derecho en el diseño de la tabla y vaya a Relaciones y elija la clave externa en el panel del lado izquierdo y en el panel del lado derecho, expanda el menú "INSERTAR y ACTUALIZAR la especificación" y seleccione "Cascada" como Eliminar regla.
fuente
Usa algo como
Complete los nombres de columna correctos y debería estar configurado. Como mark_s dijo correctamente, si ya tiene una restricción de clave externa en su lugar, tal vez necesite eliminar primero la antigua y luego crear la nueva.
fuente
Primero para habilitar la propiedad ONCascade:
1. Descarte la restricción de clave externa existente
2.añada uno nuevo con la configuración ON DELETE CASCADE habilitada
Ex:
Segundo para deshabilitar la propiedad ONCascade:
1. Descarte la restricción de clave externa existente
2.Agregue uno nuevo con el ajuste ON DELETE NO ACTION habilitado
Ex:
fuente
ON DELETE CASCADE
Especifica que los datos secundarios se eliminan cuando se eliminan los datos principales.
Para esta clave externa, hemos especificado la
ON DELETE CASCADE
cláusula que le dice a SQL Server que elimine los registros correspondientes en la tabla secundaria cuando se eliminan los datos en la tabla primaria. Entonces, en este ejemplo, si se elimina un valor de product_id de la tabla de productos, los registros correspondientes en la tabla de inventario que usan este product_id también se eliminarán.fuente
Si la relación uno a muchos es de T1 a T2, entonces no representa una función y, por lo tanto, no se puede usar para deducir o inferir una función inversa que garantice que el valor T2 resultante no omita las tuplas de T1 unirse a T2 que son válidas deductivamente , porque no hay una función inversa deductivamente válida. (representar las funciones era el propósito de las claves primarias). La respuesta en SQL think es sí, puede hacerlo. La respuesta en el pensamiento relacional es no, no puedes hacerlo. Véanse los puntos de ambigüedad en Codd 1970. La relación debería ser de muchos a uno de T1 a T2.
fuente
Creo que no puede simplemente eliminar la propiedad de tablas, y si se trata de datos de producción reales, simplemente elimine el contenido que no afecta el esquema de la tabla.
fuente