Delete en cascada SQL Server 2005

29/11/2006 - 14:33 por Paul | Informe spam
Hola,
Estoy usando SQL Server 2005, y tengo una tengo el siguiente problema:

Tabla Pieza( Id, Nombre,)
Tabla Composición, que indica que una pieza esta compuesta por otras
piezas:
Composicion(Id, IdPiezaPadre, idPiezaHija)

Si hago una relación entre "Pieza.Id" y "Composición.IdPiezaPadre" y
marca actualizar y eliminar en cascada, todo va correctamente, pero si
ahora pongo una segunda relación entre "Pieza.Id" y
"Composición.IdPiezaHija" y marca actualizar y eliminar en cascada,
resulata que me da un error de bucle.

Yo quiero que cuando elimine una pieza de la tabla Piezas se eliminaran
los registros de la tabla composición que tuvieran en el campo
IdPiezaPadre, idPiezaHija igual al id de la tabla piezas.

Como hacerlo? Creo que es muy simple, no se pq no me deja hacerla

Gracias

Preguntas similare

Leer las respuestas

#1 Maxi
29/11/2006 - 17:18 | Informe spam
Hola es logico ese error piensa que como tienes 2 fk sobre el mismo registro
no seria logico borrarlo de una quizas, yo te recomiendo que esta logica del
DRI lo hagas via Triggers en este caso puntual


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Paul" escribió en el mensaje
news:
Hola,
Estoy usando SQL Server 2005, y tengo una tengo el siguiente problema:

Tabla Pieza( Id, Nombre,)
Tabla Composición, que indica que una pieza esta compuesta por otras
piezas:
Composicion(Id, IdPiezaPadre, idPiezaHija)

Si hago una relación entre "Pieza.Id" y "Composición.IdPiezaPadre" y
marca actualizar y eliminar en cascada, todo va correctamente, pero si
ahora pongo una segunda relación entre "Pieza.Id" y
"Composición.IdPiezaHija" y marca actualizar y eliminar en cascada,
resulata que me da un error de bucle.

Yo quiero que cuando elimine una pieza de la tabla Piezas se eliminaran
los registros de la tabla composición que tuvieran en el campo
IdPiezaPadre, idPiezaHija igual al id de la tabla piezas.

Como hacerlo? Creo que es muy simple, no se pq no me deja hacerla

Gracias
Respuesta Responder a este mensaje
#2 Paul
29/11/2006 - 18:34 | Informe spam
Hola Maxi,

Hola,

Pero entonces el Sql Server 2005 no está preparado para controlar
entidades reflexivas M-N?


Maxi ha escrito:

Hola es logico ese error piensa que como tienes 2 fk sobre el mismo registro
no seria logico borrarlo de una quizas, yo te recomiendo que esta logica del
DRI lo hagas via Triggers en este caso puntual


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Paul" escribió en el mensaje
news:
Hola,
Estoy usando SQL Server 2005, y tengo una tengo el siguiente problema:

Tabla Pieza( Id, Nombre,)
Tabla Composición, que indica que una pieza esta compuesta por otras
piezas:
Composicion(Id, IdPiezaPadre, idPiezaHija)

Si hago una relación entre "Pieza.Id" y "Composición.IdPiezaPadre" y
marca actualizar y eliminar en cascada, todo va correctamente, pero si
ahora pongo una segunda relación entre "Pieza.Id" y
"Composición.IdPiezaHija" y marca actualizar y eliminar en cascada,
resulata que me da un error de bucle.

Yo quiero que cuando elimine una pieza de la tabla Piezas se eliminaran
los registros de la tabla composición que tuvieran en el campo
IdPiezaPadre, idPiezaHija igual al id de la tabla piezas.

Como hacerlo? Creo que es muy simple, no se pq no me deja hacerla

Gracias
Respuesta Responder a este mensaje
#3 Maxi
29/11/2006 - 19:54 | Informe spam
Hola, vos en un mismo registro tenes 2 campos q apuntan al mismo maestro ,
estos 2 campos tendran valores distintos entonces si por ej se elimina el
hijo que sucede con ese registro que tambien tiene el padre? me explico?
como lo resolverias vos?


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Paul" escribió en el mensaje
news:
Hola Maxi,

Hola,

Pero entonces el Sql Server 2005 no está preparado para controlar
entidades reflexivas M-N?


Maxi ha escrito:

Hola es logico ese error piensa que como tienes 2 fk sobre el mismo
registro
no seria logico borrarlo de una quizas, yo te recomiendo que esta logica
del
DRI lo hagas via Triggers en este caso puntual


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Paul" escribió en el mensaje
news:
Hola,
Estoy usando SQL Server 2005, y tengo una tengo el siguiente problema:

Tabla Pieza( Id, Nombre,)
Tabla Composición, que indica que una pieza esta compuesta por otras
piezas:
Composicion(Id, IdPiezaPadre, idPiezaHija)

Si hago una relación entre "Pieza.Id" y "Composición.IdPiezaPadre" y
marca actualizar y eliminar en cascada, todo va correctamente, pero si
ahora pongo una segunda relación entre "Pieza.Id" y
"Composición.IdPiezaHija" y marca actualizar y eliminar en cascada,
resulata que me da un error de bucle.

Yo quiero que cuando elimine una pieza de la tabla Piezas se eliminaran
los registros de la tabla composición que tuvieran en el campo
IdPiezaPadre, idPiezaHija igual al id de la tabla piezas.

Como hacerlo? Creo que es muy simple, no se pq no me deja hacerla

Gracias
Respuesta Responder a este mensaje
#4 Javier Loria
30/11/2006 - 09:13 | Informe spam
Hola Paul:
La opcion de cascada en SQL 2000 y 2005 esta limitada para que solo
tenga una ruta de ejecucion, o sea no puede la tabla referencia ser objeto
de borrado o actualizacion por dos caminos. Por ejemplo si tenemos la
siguientes relaciones entre tablas, donde -> indica una relacion padre-hijo
y -> apunta al hijo:
1) A->B, B->C, C->D: Esto es permitido, la cascada puede tener multiples
niveles y funcionara correctamente.
2) A->B, A->C, B->D, C->D: NO esta permitdo, porque cuando borro A
existen 2 caminos para borrar D, usando B o usando C.
3) A->A (Padre), A->A (Hijo): o sea tu caso, tiene dos caminos para
borrar la A de la derecha y tampoco esta permitido:
Una nota aparte, porque necesitas la segunda relacion IdPiezaHija? No
estas incluyendo informacion redundante innecesaria? Ya que con una simple
consulta puedes obtener esta informacion por medio de IdPiezaPadre?
Saludos,


Javier Loria
Costa Rica-MVP
Solid Quality Learning


"Paul" wrote in message
news:
Hola,
Estoy usando SQL Server 2005, y tengo una tengo el siguiente problema:

Tabla Pieza( Id, Nombre,)
Tabla Composición, que indica que una pieza esta compuesta por otras
piezas:
Composicion(Id, IdPiezaPadre, idPiezaHija)

Si hago una relación entre "Pieza.Id" y "Composición.IdPiezaPadre" y
marca actualizar y eliminar en cascada, todo va correctamente, pero si
ahora pongo una segunda relación entre "Pieza.Id" y
"Composición.IdPiezaHija" y marca actualizar y eliminar en cascada,
resulata que me da un error de bucle.

Yo quiero que cuando elimine una pieza de la tabla Piezas se eliminaran
los registros de la tabla composición que tuvieran en el campo
IdPiezaPadre, idPiezaHija igual al id de la tabla piezas.

Como hacerlo? Creo que es muy simple, no se pq no me deja hacerla

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