PARA M VALLEJOS

dradana2003
05 de Abril del 2006
mysql> create trigger bajasistema before delete on personas
-> for each row
-> insert into bajas (nombre, Nombre2, Apellido1, Apellido2, CI, Calle, NoCa
sa, Apto, Entre1, Entre2, Telefono, Sexo, IdBarrio, IdReligion, FIntrodu, Colorp
iel, IdPersonas, FBaja) select personas.nombre, personas.nombre2, personas.Apellido1, p
ersonas.Apellido2, Personas.CI, Personas.Calle, personas.NoCasa, personas.Apto,
personas.Entre1, Personas.Entre2, personas.Telefono, personas.sexo, personas.IdB
arrio, Personas.IdReligion, personas.FIntrodu, personas.ColorPiel, personas.IdPe
rsonas, Current_Date from personas;
Query OK, 0 rows affected (0.03 sec)

CON ESTE TRIGGER TRABAJA BIEN Y CADA VEZ QUE BORRO EN PERSONAS ME COPIA PARA BAJAS ,PERO ELPROBLEMA ES QUE LO COPIA TODO Y NO LA LINEAS O LA FILA QUE ESTOY BORRANDO

SALUDOS

mvallejos
05 de Abril del 2006
No conozco MySQL, pero lo primero que veo en esa consulta es que el Select que inserta los valores, no tiene filtros, por ende siempre te va a insertar todos los registros.
En SQL Server, en la ejecución de los trigguers, hay 2 tablas de entorno que se generan, INSERTED y DELETED, que contienen temporalmente los datos del registro que estás tratando, en su estado anterior.
Esas tablas son las que se usan para recuperar los valores de filtros para actulizaciones en cascada y todo eso.
Como funcionan esas tablas

DELETED tiene el registro que se ha eliminando
INSERTED tiene el registro que se ha modificado

Cuando se modifica un registro, el motor borra el viejo e inserta otro con los valores nuevos, por eso, cuando se Updatea uno o varios registros, actuan las dos tablas.

Saludos