none
The DELETE statement conflicted with the REFERENCE constraint

    Question

  • SQL Server 2005

    Saludos, no puedo borrar algunas filas donde su pk esta relacionado con otras tablas, me da el error; como hago para hacer un borrado en cascada, es decir que al borrar el registro de una tabla se borren los registros de las otras tablas en las que tiene relación?  

    The DELETE statement conflicted with the REFERENCE constraint

    "FK_contactos_empresas". The conflict occurred in database "tse-erp", table "tseadmin.contactos", column 'id_empresa'.
    The statement has been terminated.


    Friday, September 09, 2011 5:18 PM

Answers

  • Tienes que crear la relación con la opción ON DELETE CASCADE activada, para lo cual tendrás previamente que eliminar la restricción. Por ejemplo:

    ALTER TABLE tuTabla DROP CONSTRAINT tuFK
    
    
    ALTER TABLE tuTabla ADD CONSTRAINT tuFK FOREIGN KEY (...) REFERENCES ... (...)  <br/>ON DELETE CASCADE 
    	
    


    Monday, September 12, 2011 3:36 PM

All replies

  • Hola

    La integridad referencial, precisamente sirve para asegurar la consistencia de nuestros datos.

    No puedes eliminar registros de la tabla CONTACTOS, porque uno de los valores del campo Id_Empresa esta registrado en otra tabla CONTACTOS_EMPRESA (creo) como una restricción. Es decir en esta tabla solo pueden registrarse datos que esten en Contactos.

    Tienes que eliminar primero los datos de la tabla Contactos_Empresa y luego podras eliminar datos de la tabla Contactos.

    Ejemplo:

    En la tabla Contactos_Empresa tienes para el campo Id_empresa, valores de 1, 2 y 3

    En la tabla Contactos tienes para el campo Id_empresa valores de 1, 2 y 3

    Entonces si eliminas los registos de la tabl Contactos_Empresa con valores iguales a 2. Recien podras eliminar el registro de la tabla Contactos con valor igual a 2.

    Saludos,

    JORGE

    Friday, September 09, 2011 5:28 PM
  • Muy bien, existe alguna sentencia  que pueda hacer esto; como un inner join por ejemplo
    Friday, September 09, 2011 5:30 PM
  • Hola,

    Si usted quieres eliminar ese registro pimero tiene que eliminarlos  registro que hace referencia el 'id_empresa' y luego borra la tabla padre

    un saludo


    Santo Domingo
    Sunday, September 11, 2011 9:28 PM
  • Eso lo entiendo, pero quisiera saber si hay una sentencia sql que me pueda borrar todos los registros relacionados con ese registro.
    Monday, September 12, 2011 3:07 PM
  • Tienes que crear la relación con la opción ON DELETE CASCADE activada, para lo cual tendrás previamente que eliminar la restricción. Por ejemplo:

    ALTER TABLE tuTabla DROP CONSTRAINT tuFK
    
    
    ALTER TABLE tuTabla ADD CONSTRAINT tuFK FOREIGN KEY (...) REFERENCES ... (...)  <br/>ON DELETE CASCADE 
    	
    


    Monday, September 12, 2011 3:36 PM
  • Tienes que crear la relación con la opción ON DELETE CASCADE activada, para lo cual tendrás previamente que eliminar la restricción. Por ejemplo:

     

    ALTER TABLE tuTabla DROP CONSTRAINT tuFK
    
    
    ALTER TABLE tuTabla ADD CONSTRAINT tuFK FOREIGN KEY (...) REFERENCES ... (...)  <br/>ON DELETE CASCADE 
    	
    


     


    Pero sin el <br/> ;)
    Víctor M. Sánchez García (ES) (BI) Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky
    Monday, September 12, 2011 3:51 PM
  • Sí, hay veces que el formateo del código no está del todo pulido  :)
    Tuesday, September 13, 2011 7:38 AM