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

Preguntas similare

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:
Mostrar la cita
#2 Miguel Egea
12/08/2003 - 08:45 | Informe spam
Gracias Javier, no pude contestarle a nuestro amigo antes justo con este
código, en mi caso yo usaría esta variante
/* código de Javier Modificado y sin probar*/
CREATE TRIGGER Del_TablaMadre
ON dbo.TablaMadre
FOR DELETE
AS
BEGIN
set nocount on
DELETE TablaHija
FROM DELETED JOIN TablaHija
ON DELETED.PK=TablaHija.PKMadre
set nocount off
END
GO
/* fin codigo de javier */


Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Javier Loria(MVP)" escribió en el mensaje
news:
Mostrar la cita
#3 Miguel Egea
14/08/2003 - 14:06 | Informe spam
Hola Javier, ¿Pecado Mayor?, la verdad es que no veo por qué , ¿que se me
puede estar escapando? Lo digo por ir buscando un sacerdote que me confiese
(lo hago siempre así :-) )



Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Javier Loria(MVP)" escribió en el mensaje
news:
Mostrar la cita
llevarlo,
Mostrar la cita
Ads by Google
Search Busqueda sugerida