ELIMINAR REGISTROS EN CASCADA VER. 7.0

11/08/2003 - 20:00 por Yumel Ojeda | Informe spam
Hola Amigos
quisiera saber si tienen alguna rutina de un trigger que elimine en cascada,
ó los hijos de otra tabla antes de borrar el registro de la tabla madre

bye by

Atte. Yumel Ojeda
 

Leer las respuestas

#1 Javier Loria\(MVP\)
12/08/2003 - 04:48 | Informe spam
Hola Yumel:
Si puedes resolver el problema en un procedimiento almacenado te lo
recomiendo, si no puedes piensa en pasarte a SQL 2000 que lo hace
automatico, sino puedes aqui esta el codigo:
/* Inicio de Codigo */
CREATE TABLE TablaMadre
(
PK INT NOT NULL PRIMARY KEY
)

CREATE TABLE TablaHija
(
PKMadre INT NOT NULL,
PKHija INT NOT NULL PRIMARY KEY
)

GO
CREATE TRIGGER Del_TablaMadre
ON dbo.TablaMadre
FOR DELETE
AS
BEGIN
IF EXISTS (SELECT *
FROM DELETED
JOIN TablaHija
ON DELETED.PK=TablaHija.PKMadre)
DELETE TablaHija
FROM DELETED JOIN TablaHija
ON DELETED.PK=TablaHija.PKMadre
END
GO
INSERT TABLAMADRE
VALUES(1)
INSERT TABLAMADRE
VALUES(2)
INSERT TABLAMADRE
VALUES(3)

INSERT TABLAHIJA
VALUES(1,1)
INSERT TABLAHIJA
VALUES(1,2)
INSERT TABLAHIJA
VALUES(1,3)
INSERT TABLAHIJA
VALUES(2,4)
INSERT TABLAHIJA
VALUES(2,5)
INSERT TABLAHIJA
VALUES(2,6)

SELECT * FROM TABLAMADRE
SELECT * FROM TABLAHIJA

DELETE TABLAMADRE
WHERE PK=1

SELECT * FROM TABLAMADRE
SELECT * FROM TABLAHIJA

DROP TABLE TABLAHIJA
DROP TABLE TABLAMADRE
/* Fin de Codigo */

Una nota para que este codigo sea ejecutado NO puede haber INTEGRIDAD
REFERENCIAL DECLARATIVA entre las Tablas :(
Por ende hay que escribir codigo para mantener dicha integridad.

Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Yumel Ojeda escribio:
Hola Amigos
quisiera saber si tienen alguna rutina de un trigger que elimine en
cascada, ó los hijos de otra tabla antes de borrar el registro de la
tabla madre

bye by

Atte. Yumel Ojeda

Preguntas similares