Vuelvo con los triggers!!! grgrgrgrgr

12/08/2003 - 17:34 por davidojeda | Informe spam
estoy tratando de implementar una bitacora para mi bd..

estuve utilizando la funcion "if update(campo)", pero esa funcion me
devuelve verdadero siempre que se graba ese campo, independientemente
si se vuelve a garbar la misma informacion o no, me explico? es decir:

tengo un registro

IDEMPLEADO NOMBRE APELLIDO
1 JUAN PEREZ

SI EJECUTO UPDATE EMPLEADO SET NOMBRE='JUAN' WHERE IDEMPLEADO=1

y en el triger valido if update(nombre), la condicion me devuelve
verdadero,
lo que yo pensaba es que me devolvia verdadero si los datos eran
diferentes,

entonces como puedo para validar si un campo tiene un valor diferente
despues de un update???

porque en la tabla inserted y en la de empleado despues del update y
durante la ajecucion del trigger se encuentran exactamente iguales!!

una ayudadita please!!!!

esque si no puedo validar eso la bd de bitacora ira creciendo con
mucha rapides!!!

Preguntas similare

Leer las respuestas

#1 Chente
12/08/2003 - 17:44 | Informe spam
Que tal David, lo que yo tengo implementado es lo siguiente, es un poco
burdo pero funciona, a lo mejor alguien mas puede colaborar...

tienes pasar los valores anteriores y los nuevos a parametros y enntoces
validas que sean diferentes...

if update(mcreferencia) and (@mcreferencia_v <> @mcreferencia_n)
hacemos lo que tengamos que hacer...



Saludos.

Vicente López.


"David Ojeda" escribió en el mensaje
news:
estoy tratando de implementar una bitacora para mi bd..

estuve utilizando la funcion "if update(campo)", pero esa funcion me
devuelve verdadero siempre que se graba ese campo, independientemente
si se vuelve a garbar la misma informacion o no, me explico? es decir:

tengo un registro

IDEMPLEADO NOMBRE APELLIDO
1 JUAN PEREZ

SI EJECUTO UPDATE EMPLEADO SET NOMBRE='JUAN' WHERE IDEMPLEADO=1

y en el triger valido if update(nombre), la condicion me devuelve
verdadero,
lo que yo pensaba es que me devolvia verdadero si los datos eran
diferentes,

entonces como puedo para validar si un campo tiene un valor diferente
despues de un update???

porque en la tabla inserted y en la de empleado despues del update y
durante la ajecucion del trigger se encuentran exactamente iguales!!

una ayudadita please!!!!

esque si no puedo validar eso la bd de bitacora ira creciendo con
mucha rapides!!!
Respuesta Responder a este mensaje
#2 davidojeda
13/08/2003 - 01:46 | Informe spam
gracias liliana!!!!!!


eres un primor!!!!!!!!!!


era la solucion exacta!!!
Respuesta Responder a este mensaje
#3 Javier Loria\(MVP\)
13/08/2003 - 02:01 | Informe spam
Hola:
Hay que tener en mira la actualizacion de multipes filas en el mismo
UPDATE.

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.
Liliana Sorrentino escribio:
David,
como el UPDATE no es más que un DELETE y un INSERT, tenés en ambas
tablas tu dato, y solo necesitás compararlos en el trigger:

IF (select nombre from deleted) <> (select nombre from inserted)

Saludos... Liliana.

"David Ojeda" escribió en el mensaje
news:
estoy tratando de implementar una bitacora para mi bd..

estuve utilizando la funcion "if update(campo)", pero esa funcion me
devuelve verdadero siempre que se graba ese campo, independientemente
si se vuelve a garbar la misma informacion o no, me explico? es
decir:

tengo un registro

IDEMPLEADO NOMBRE APELLIDO
1 JUAN PEREZ

SI EJECUTO UPDATE EMPLEADO SET NOMBRE='JUAN' WHERE IDEMPLEADO=1

y en el triger valido if update(nombre), la condicion me devuelve
verdadero,
lo que yo pensaba es que me devolvia verdadero si los datos eran
diferentes,

entonces como puedo para validar si un campo tiene un valor diferente
despues de un update???

porque en la tabla inserted y en la de empleado despues del update y
durante la ajecucion del trigger se encuentran exactamente iguales!!

una ayudadita please!!!!

esque si no puedo validar eso la bd de bitacora ira creciendo con
mucha rapides!!!
Respuesta Responder a este mensaje
#4 davidojeda
13/08/2003 - 16:53 | Informe spam
Liliana

siento mucho decirte que la solucion que me sugeriste en principio fue
adecuada, pero no contemplamos cuando es solo un insert (segun tu me
dices que un udpdate es basicamente un conjunto de insert y delete de
la fila)

ahora que ya tenia implementado el trigger cuando el usuario agrega un
registro nuevo, en la aplicacion de vb le sale un error muy raro, y he
revisado en la tabla de bitacora que el triger me agrega un registro
de delete y otro de update cuando se agrega un registro.. y lo
raro es porque me agrega uno de delete si se supone que solo es un
insert?

te escribo un ejemplo pequeño de como realize el trigger...
(aclaro que soy novato y a lo mejor esta mal diseñado :Ž( )

insert into empleado_bitacora
(idempleado,
nombre,
apellido,
movbit)
select i.idempleado,
i.nombre,
i.apellido,
movbit='UPD'
from inserted i
inner join empleado e on e.idempleado=i.idempleado
inner join deleted d on d.idempleado=i.idempleado
where i.nombre<>d.nombre or
i.apellido<>d.apellido

este es un ejemplo minimo, solo incluye tres campos el campo
movbit lo utilizo para saber (en la bitacora) si fue un update o un
insert, y se graba 'UPD' si fue insert o update, y 'DEL' si fue un
delete. este trigger solo es para insert y update, tengo otro para
delete, en ese no tengo problema

realice los inner join para las tres tablas (inserted, empleado,
deleted), aunque la verdad no se si sea necesario hacerlo asi.

el error sale cuando se hace una instruccion insert:
insert into empleado (idempleado,nombre,apellido) values
(1,'juan','perez')

en la bitacora primero me agrega un movimiento de delete y despues de
un update


espero alguien pueda ayudarme...

saludos
Respuesta Responder a este mensaje
#5 davidojeda
14/08/2003 - 02:15 | Informe spam
algo que se me habia pasado


la funcion update() fallara si se hace una actualizacion de datos masiva????

un caso para la araña!!!

que otra opcion tengo???



saludos!!!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida