Trigger en cascada pq no funciona?

22/02/2007 - 15:46 por Paul | Informe spam
Hola,

Tengo una tabla cde la siguiente forma:

Compos (id int, Nombre varchar(30), idPadre int)

Donde idPadre apunta a un Compos.id

Quiero que cuando se elimine un Compos.id se elimen sus hijos
Ejemplo:
Compos (1, "Uno", NULL)
Compos (2, "Dos", 1)
Compos (3, "Tres", 1)
Compos (4, "Cuatro", 2)

Por consiguiente si eliman el Compos.id=1 se deben de eliminar los
id=2,3,4. El 4 se debe eliminar pq su padre es el 2 y el dos pq su
padre es el 1.

El trigger es el siguiente:

ALTER TRIGGER [dbo].[DelCompos]
ON [dbo].[Compos]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM Compos WHERE idPadre IN (SELECT id FROM DELETED);
END

Pero con este triger, al eliminar el Compos.id=1 se eliman el
Compos.id=2 y el Compos.id=3, pero NO se elimina el Compos.id=4.

Alguien puede darme una solución para que se eliminen realmente todos
sus hijos?

Gracias
 

Leer las respuestas

#1 Alejandro Mesa
22/02/2007 - 16:09 | Informe spam
Paul,

Que version de SQL Server estas usando?


AMB

"Paul" wrote:

Hola,

Tengo una tabla cde la siguiente forma:

Compos (id int, Nombre varchar(30), idPadre int)

Donde idPadre apunta a un Compos.id

Quiero que cuando se elimine un Compos.id se elimen sus hijos
Ejemplo:
Compos (1, "Uno", NULL)
Compos (2, "Dos", 1)
Compos (3, "Tres", 1)
Compos (4, "Cuatro", 2)

Por consiguiente si eliman el Compos.id=1 se deben de eliminar los
id=2,3,4. El 4 se debe eliminar pq su padre es el 2 y el dos pq su
padre es el 1.

El trigger es el siguiente:

ALTER TRIGGER [dbo].[DelCompos]
ON [dbo].[Compos]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM Compos WHERE idPadre IN (SELECT id FROM DELETED);
END

Pero con este triger, al eliminar el Compos.id=1 se eliman el
Compos.id=2 y el Compos.id=3, pero NO se elimina el Compos.id=4.

Alguien puede darme una solución para que se eliminen realmente todos
sus hijos?

Gracias


Preguntas similares