error al borrar un registro en una tabla relacionada

30/04/2008 - 20:46 por mecodi | Informe spam
hola:
Tengo problemas al borrar desde el web developer(c# y ADO.NET) un registro
en una tabla almacenada en sql 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)
pues un vehículos puede aparecer muchas veces en Empleados_Vehiculos (en
distinta fecha), relación 1 a n

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

Leer las respuestas

#1 Gux (MVP)
30/04/2008 - 21:01 | Informe spam
Sucede que las restricciones no le van a permitir borrar un Vehiculo cuyo
IdVehiculo exista en alguna fila de la tabla EmpeadosVehiculos, sea cual sea
la fecha.

Usted primero examina la tabla EmpeadosVehiculos y detecta que el IdVehiculo
a borrar no existe para la fecha asignada... pero eso no sirve de nada. La
referencia de integridad exige que no se puede borrar un Vehiculo si su Id
existe en EmpeadosVehiculos.

En su escenario, el uso de triggers podría ser una solución aceptable.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"mecodi" wrote:

hola:
Tengo problemas al borrar desde el web developer(c# y ADO.NET) un registro
en una tabla almacenada en sql 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)
pues un vehículos puede aparecer muchas veces en Empleados_Vehiculos (en
distinta fecha), relación 1 a n

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

Preguntas similares