Trigger por Update

21/02/2007 - 14:38 por Penta | Informe spam
Estimados.
Tengo un trigger que se gatilla cuando se realiza un Update a la Tabla
Clientes.

La tabla clientes tiene 2 campos:

Nombre varchar(100)
Direccion varchar(500)

Como puedo comparar si el campo nuevo es distinto al antiguo? y de
esta manera poder hacer o no un insert en una tabla historica ?

Muchas Gracias.
Penta.

Preguntas similare

Leer las respuestas

#1 Maxi
21/02/2007 - 15:15 | Informe spam
Hola, si es distinto quiere decir que el vaklor cambio entre la tabla
inserted y deleted, entonces deberias unir esas 2 tablas con join y
verificar si algun campo cambio (menos el id claro) algo asi como

insert into tablaauditorias (campos)
select campos from inserted i inner join deleted d on
i.id = d.id and
(i.nombre <> d.nombre or i.direccion <> d.direccion)



Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Penta" escribió en el mensaje
news:
Estimados.
Tengo un trigger que se gatilla cuando se realiza un Update a la Tabla
Clientes.

La tabla clientes tiene 2 campos:

Nombre varchar(100)
Direccion varchar(500)

Como puedo comparar si el campo nuevo es distinto al antiguo? y de
esta manera poder hacer o no un insert en una tabla historica ?

Muchas Gracias.
Penta.

Respuesta Responder a este mensaje
#2 Alejandro Mesa
21/02/2007 - 15:29 | Informe spam
Penta,

Compara filas de las tablas DELETED e INSERTED. Es aconsejable tener una
clave primaria y ademas evitar que esta sea modificada, de lo contrario no se
sabria cual es la fila vieja y cual la nueva.

Supongamos que tu tabla tiene una clave primaria que no se modifica [pk],
entonces

create trigger tr_t1_upd on dbo.t1
for update
as

insert into dbo.tabla_historica(pk, nombre, direccion, date_updated)
select i.pk, i.nombre, i.direccion, getdate()
from deleted as d inner join inserted as i on d.pk = i.pk
where
(
d.nombre != i.nombre
or (d.nombre is null and i.nombre is not null)
or (d.nombre is not null and i.nombre is null)
)
or
(
d.direccion!= i.direccion
or (d.direccionis null and i.direccionis not null)
or (d.direccionis not null and i.direccionis null)
)
go


Puedes insertar la fila anterior (desde deleted) y la nueva fila.


AMB

"Penta" wrote:

Estimados.
Tengo un trigger que se gatilla cuando se realiza un Update a la Tabla
Clientes.

La tabla clientes tiene 2 campos:

Nombre varchar(100)
Direccion varchar(500)

Como puedo comparar si el campo nuevo es distinto al antiguo? y de
esta manera poder hacer o no un insert en una tabla historica ?

Muchas Gracias.
Penta.


Respuesta Responder a este mensaje
#3 Noldis Chumacero
21/02/2007 - 15:29 | Informe spam
Penta,


Tienes que utilizar las tablas inserted y deleted, puedes fijarte en los BOL
(Libros en línea) para mayor información.

Saludos

Ing. Noldis Chumacero Ch.
Dpto. Sistemas, AeroSur.
Santa Cruz de la Sierra - Bolivia

"Penta" escribió en el mensaje
news:
Estimados.
Tengo un trigger que se gatilla cuando se realiza un Update a la Tabla
Clientes.

La tabla clientes tiene 2 campos:

Nombre varchar(100)
Direccion varchar(500)

Como puedo comparar si el campo nuevo es distinto al antiguo? y de
esta manera poder hacer o no un insert en una tabla historica ?

Muchas Gracias.
Penta.

Respuesta Responder a este mensaje
#4 Penta
21/02/2007 - 16:04 | Informe spam
Gracias a los tres por las respuestas.


Noldis justamente esas tablas estoy utilizando pero los BOL no me
dieron la respuesta que buscaba.
Alejandro y Maxi, eso era lo que andaba buscando.
Alejandro mil garcias por ser tan detallado.

Ps. me podrian indicar que y como buscar mas detalles sobre triggers
en la ayuda? ya que al poner trigger no me sale nada :(


Penta.
Respuesta Responder a este mensaje
#5 Alejandro Mesa
21/02/2007 - 16:47 | Informe spam
CREATE TRIGGER (Transact-SQL)
http://msdn2.microsoft.com/en-us/li...89799.aspx

Using the inserted and deleted Tables
http://msdn2.microsoft.com/en-us/li...91300.aspx


AMB

"Penta" wrote:

Gracias a los tres por las respuestas.


Noldis justamente esas tablas estoy utilizando pero los BOL no me
dieron la respuesta que buscaba.
Alejandro y Maxi, eso era lo que andaba buscando.
Alejandro mil garcias por ser tan detallado.

Ps. me podrian indicar que y como buscar mas detalles sobre triggers
en la ayuda? ya que al poner trigger no me sale nada :(


Penta.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida