none
ERROR CON LLAVE FORANEA RRS feed

  • Pregunta

  • Buenos dias

    Quiero crear la siguiente tabla en sql server

    CREATE TABLE Grado_Materia(
     id_grado INT NOT NULL,
     id_materia INT NOT NULL,
     id_ciclo_escolar INT NOT NULL,
     CONSTRAINT PK_GradoMateria PRIMARY KEY (id_grado, id_materia, id_ciclo_escolar),
     CONSTRAINT FK_grado_grado_idx FOREIGN KEY (id_grado) REFERENCES Grado (id_grado) ON DELETE CASCADE ON UPDATE CASCADE,
     CONSTRAINT FK_grado_materia_idx FOREIGN KEY (id_materia) REFERENCES Materia (id_materia) ON DELETE CASCADE ON UPDATE CASCADE,
     CONSTRAINT FK_grado_ciclo_idx FOREIGN KEY (id_ciclo_escolar) REFERENCES Ciclos_Escolares (id_ciclo_escolar) ON DELETE CASCADE ON UPDATE CASCADE
    )

    El problema es que al crearla me marca el siguiente error:

    Mens. 1785, Nivel 16, Estado 0, Línea 1
    Si especifica la restricción FOREIGN KEY 'FK_grado_materia_idx' en la tabla 'Grado_Materia', podrían producirse ciclos o múltiples rutas en cascada. Especifique ON DELETE NO ACTION o UPDATE NO ACTION, o bien modifique otras restricciones FOREIGN KEY.
    Mens. 1750, Nivel 16, Estado 0, Línea 1
    No se pudo crear la restricción. Consulte los errores anteriores.

    Por que sale ese error?? Obviamente las tablas a la que hacen referencia esas llaves foráneas ya estan creadas, en mysql tengo esa tabla asi como esta y no hubo problema al crearla por que en sql server si hay problema?? Como puedo solucionarlo??

    Agradeceria su ayuda


    jueves, 9 de febrero de 2017 16:50

Respuestas

Todas las respuestas

  • Hola que tal.

    El problema es que en la misma sentencia de creación, se están colocando dos Foreign Keys que tienen acción "CASCADE".

    La definición de estas solo admiten un único camino (o sea una sola acción CASCADE) por tabla. La solución sería agregar la Foreign Key sin la acción CASCADE.

    "

     CONSTRAINT FK_grado_ciclo_idx FOREIGN KEY (id_ciclo_escolar) REFERENCES Ciclos_Escolares (id_ciclo_escolar) on DELETE no action on UPDATE no action

    Cualquier cosa te dejo un link con mas información :

    https://support.microsoft.com/es-es/help/321843/error-message-1785-occurs-when-you-create-a-foreign-key-constraint-that-may-cause-multiple-cascade-paths

    Saludos!


    Mariano K.

    jueves, 9 de febrero de 2017 21:05
  • Pero como es que al crear esta tabla no marco error si te fijas tengo dos Foreign Keys con accion CASCADE

    CREATE TABLE Telefono(
     id_telefono   INT IDENTITY(1,1) NOT NULL,
     id_persona    INT NOT NULL,
     telefono      VARCHAR(45) NOT NULL,
     tipo_telefono INT NOT NULL,
     CONSTRAINT PK_Telefono PRIMARY KEY(id_telefono),
     CONSTRAINT FK_PersonaTelefono FOREIGN KEY (id_persona) REFERENCES PERSONA (id_persona) ON DELETE CASCADE ON UPDATE CASCADE,
     CONSTRAINT FK_TipoTelefono FOREIGN KEY (tipo_telefono) REFERENCES Tipo_Telefono (id_tipo_telefono) ON DELETE CASCADE ON UPDATE CASCADE
    )

    Por que sucede que en esta tabla no hubo problema con la creación de las llaves foráneas, sera por que no las estoy trabajando como primarias como en la tabla que puse arriba??

    lunes, 13 de febrero de 2017 16:06
  • Alex, y el resto de las tablas como están definidas las PK y FK? Mas que nada en las tablas de Grado, Materia y Ciclos_Escolares?

    Porque podría ser que el CASCADE tambien afecte a mas tablas referenciadas.


    Mariano K.

    viernes, 17 de febrero de 2017 0:18