2010-12-15 18 views
18

Tengo una tabla que representa a los usuarios. Cuando se elimina un usuario me sale:¿Cómo edito una tabla para habilitar CASCADE DELETE?

instrucción DELETE en conflicto con la restricción REFERENCIA

Al parecer, CASCADE DELETE no es tan fácil como lo imaginaba en SQL Server y la opción tiene que ser añadido a la mesa.

El problema es: No puedo encontrar la manera de agregar la opción CASCADE DELETE.

Estoy usando: SQL Server 2008. ¿Alguna idea de como hacer esto?

Respuesta

25

Leer este artículo de Microsoft por primera vez. Read Me. Uso la GUI durante el diseño, así que aquí hay una imagen de cómo se selecciona en SSMS. alt text La sintaxis agrega a la clave externa es "ON DELETE CASCADE"

17

Google ALTER TABLE DROP CONSTRAINT, entonces ALTER TABLE ADD CONSTRAINT:

ALTER TABLE

Aquí está un ejemplo rápido:

CREATE TABLE A 
(
ID INTEGER NOT NULL UNIQUE 
); 

CREATE TABLE B 
(
ID INTEGER NOT NULL UNIQUE 
    CONSTRAINT fk__B__A 
     REFERENCES A (ID) 
); 

-- Oops! Forgot the CASCADE referential actions. 
-- DROP the constraint then recreate it: 

ALTER TABLE B DROP 
    CONSTRAINT fk__B__A; 

ALTER TABLE B ADD 
    CONSTRAINT fk__B__A 
     FOREIGN KEY (ID) 
     REFERENCES A (ID) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE; 
+1

Creo que lo que RadiantHex quiere decir es que RadiantHex quiere eliminar las filas asociadas con la restricción al usar las eliminaciones en cascada para no eliminar las restricciones para que las filas se puedan eliminar. –

+4

@Mark Schultheiss: Creo que lo que el Sr. TA quiere decir es que el Sr. TA sugiere que la restricción no se puede modificar (es decir, no hay una sintaxis 'ALTER TABLE..ALTER CONSTRAINT'), sino que la restricción debe abandonarse y volverse a crear. He agregado un ejemplo para mayor claridad. – onedaywhen

9

Ésta es la manera en que yo añadiría la función de "eliminación en cascada" a una clave externa existente enSQL Server Management Studio.

Primero, encuentre su clave externa, y ábrala en "DROP and CREATE To" en una nueva ventana de Query.

Drop and Create

A continuación, sólo tiene que añadir "ON DELETE CASCADE" a la orden "ADD CONSTRAINT":

On delete cascade

A continuación, simplemente pulse pulsa el botón "Ejecutar" para ejecutar la consulta.

¡Trabajo hecho!

Cuestiones relacionadas