none
Error al borrar en una tabla relacionada con otra RRS feed

  • Pregunta

  • hola:
    Tengo problemas al borrar un registro en una tabla almacenada en SQL Server 2005
    Tengo 3 tablas relacionadas y con los siguientes campos:
    Empleados (IdEmpleado(PK),.....)
    EmpeadosVehiculos (IdEmpleado,IdVehiculo,FechaInicio,FechaFin), donde
    IdEmpleado,IdVehiculo,FechaInicio(PK)
    IdEmpleado,FechaInicio(IX), son clave única para que en una fecha 1 empleado sólo tenga un vehículo.
    IdVehiculo,FechaInicio(IX), son clave única para que en una fecha 1 vehículo sólo pueda estar en 1 empleado.
    Vehiculos (IdVehiculo(PK),......)
    Un empleado sólo puede tener asignado un vehículo y un vehículo sólo puede estar en un empleado (para una fecha determinada).
    el caso es que al BORRAR 1 vehículo:
    * compruebo que para esa fecha no esté asignado, que no aparezca en
    EmpleadosVehiculos para esa fecha, hasta ahí todo bien, pero cuando va a borrar, lanza la siguiente excepcion:
    Instrucción DELETE en conflicto con la restricción
     REFERENCE "FK_Empleados_Vehiculos_Vehiculos".
    El conflicto ha aparecido en la base de datos "recursos",
     tabla "dbo.Empleados_Vehiculos",
    column 'idVehiculo'
    En la relación "
    FK_Empleados_Vehiculos_Vehiculos", tengo:
    Tabla de clave Principal: Vehiculos (IdVehiculo)
    Tabla de clave Externa:EmpleadosVehiculos (idVehiculo)

    Si alguien me puede ayudar, yo creo que las relaciones están bien, pero algo falla.
    Un saludo.




    miércoles, 30 de abril de 2008 18:13

Todas las respuestas

  • Es que si eliminas el registro de Empleado.IdEmpleado, entonces EmpleadosVehiculos se queda huérfana (¿qué valor podría tener?) Por eso es que te lanza el error. Lo que tendrías que hacer sería eliminar primero de la tabla EmpleadosVehiculos el registro correspondiente (o en todo caso, cambiarle de valor o establecerlo a NULL, si se puede) y luego borrar de Empleados.

    O mejor aún, en tu SQL Server, ve a las propiedades de la relación (FK_EMPLEADOS_VEHICULOS) y selecciona en la forma de actualización al eliminarse, CASCADE, y así te lo eliminará de las tabla relacionada.

    Saludos.
    jueves, 8 de mayo de 2008 23:09
  • Hola.

    Lo que te está comentando Fernando Gómez es que tu error se debe a un problema de Integridad Referencial, la cual ese error es que tu base de datos está muy bien diseñada ya que como dice, EmpleadosVehiculos quedaría huérfana si posee un vínculo con su padre Empleados y ese error es una forma de proteger tu base de datos. Es una forma de protegerte.

    Notarás IdEmpleado(PK) en la tabla Empleados, esa es tu PRIMARY KEY, tu Id padre, que hace referencia a tu Foreign Key (FK) de tu tabla EmpleadosVehiculos.

    Saludos.
    jueves, 12 de marzo de 2009 1:14