error al borrar un registro enuna tabla relacionada

01/05/2008 - 10:54 por mecodi | Informe spam
hola:
Tengo problemas al borrar (desde web developer, c#) 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.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
01/05/2008 - 15:45 | Informe spam
http://www.microsoft.com/communitie...be849911f1


AMB

"mecodi" wrote:

hola:
Tengo problemas al borrar (desde web developer, c#) 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.
Respuesta Responder a este mensaje
#2 Petercito
01/05/2008 - 16:34 | Informe spam
Hola:

De lo que entiendo, no debes borrar el registro de vehículos si no de
empleados_vehículos porque a pesar de que el vehículo no se encuentra
asignado para nadie en determinada fecha, éste puede estar asignado para
otras fechas, entonces ahí es cuando te falla el borrado porque codigo de
vehículo si existe en la tabla empleados_vehiculos y no puedes dejar
huérfanos a esos registros.

Pedro Calapi


"Alejandro Mesa" wrote:

http://www.microsoft.com/communitie...be849911f1


AMB

"mecodi" wrote:

> hola:
> Tengo problemas al borrar (desde web developer, c#) 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.
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
01/05/2008 - 18:48 | Informe spam
Hola mecodi,

Las razones por las que no puedes borrar el vehículo ya te
las han dado. Solo un comentario respecto a la clave primaria.

On 1 mei, 10:54, mecodi wrote:
hola:
Tengo problemas al borrar (desde web developer, c#) 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.



No necesitas la clave primaria {IdEmpleado,IdVehiculo,FechaInicio}.

Fíjate que:
si la clave {IdEmpleado, FechaInicio} es única entonces
{IdEmpleado, IdVehiculo, FechaInicio} siempre lo será también.
y análogamente:
si la clave {IdVehiculo,FechaInicio} es única entonces
{IdEmpleado, IdVehiculo, FechaInicio} siempre lo será también.

Yo escojería una de las otras dos claves únicas y la pondría de
primaria.

Si de todas formas deseas un índice {IdEmpleado, IdVehiculo,
FechaInicio}, para acelerar ciertas consultas, no lo definas
como clave; simplemente índice.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida