se puede saber que campo se modifica con un update ?

30/03/2005 - 16:25 por Mennegguzzi | Informe spam
Hola a todos, tengo la siguiente consulta:

tengo que hacer un trigger que se ejecute cuando suceda el evento Update en
una determinada tabla.
hasta ahí estoy bien,

el tema es que necesito que el trigger se ejecute solo si el update modifica
un determinado campo de esa tabla.

hay alguna manera de saber que campo se está modificando ?

desde ya muchas gracias por su ayuda

saludos

Pablo

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
30/03/2005 - 18:53 | Informe spam
Maxi,

Yo no he dicho lo contrario. Eso ya depende de las reglas de negocio o
necesidades del usuario. Esto puede ser tan sencillo como chequear que la
columna formo parte de la sentencia UPDATE o tan complejo como chequear que
el valor de una columna tipo VARCHAR con intercalacion no sensitiva cambio su
valor de minusculas a mayusculas, cosa que con una simple comparacion i.colA
!= d.colA no se detectaria, lo mismo pasaria cuando la columna permite el
valor NULL o cuando la columna en question es tipo FLOAT, pues Microsoft
recomienda evitar el uso de este tipo de columnas en comparasiones de
igualdad o desigualdad en la clausula WHERE (Ve "Using float and real Data"
en los libros en linea). De todas manera agradezco tu comentario.


AMB

"Maxi" wrote:

Hola Ale, un solo comentario. Que una columna forme parte de un Update no
quiere decir que se haya modificado realmente el dato con lo cual no es muy
util esl uso de COLUMNS_UPDATE() :(

Lo que yo hago para verificar 100% esto es comparar ese campo entre a tabla
Inserted y Deleted y si hay diferencias entonces estoy seguro que hay
cambios :-)

En este link explico un poco mas este tema con unos ejemplos:

http://www.microsoft.com/spanish/ms...art168.asp


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
> Chequea "CREATE TRIGGER" en los libros en linea, ahi encontraras ejemplos
> de
> como consultar si la columna X formo parte de la sentencia UPDATE que
> disparo
> el trigger.
>
> - Para chequear una columna en especifico
>
> IF UPDATE (column)
>
> - Varias columnas
>
> IF (COLUMNS_UPDATED())
>
>
> AMB
>
>
>
> "Mennegguzzi" wrote:
>
>> Hola a todos, tengo la siguiente consulta:
>>
>> tengo que hacer un trigger que se ejecute cuando suceda el evento Update
>> en
>> una determinada tabla.
>> hasta ahí estoy bien,
>>
>> el tema es que necesito que el trigger se ejecute solo si el update
>> modifica
>> un determinado campo de esa tabla.
>>
>> hay alguna manera de saber que campo se está modificando ?
>>
>> desde ya muchas gracias por su ayuda
>>
>> saludos
>>
>> Pablo
>>
>>
>>



Respuesta Responder a este mensaje
#7 Alejandro Mesa
30/03/2005 - 19:11 | Informe spam
Mennegguzzi,

Con este trigger estarias actualizando por segunda vez el valor de la
columna FechaEnt, pues el valor de la columna FechaEnt ne la tabla Ventas es
el mismo que tiene la tabla inserted.

use northwind
go

create table t (
colA int not null identity primary key,
colB int not null
)
go

create trigger tr_t_upd on t
for update
as
set nocount on

select
t.colA,
t.colB,
i.colA,
i.colB
from
inserted as i
inner join
deleted as d
on i.colA = d.colA and i.colB <> d.colB
inner join
t
on i.colA = t.colA
go

insert into t (colB) values(10)
go

update t
set colB = 20
where colB = 10
go

drop table t
go


AMB

"Mennegguzzi" wrote:

Mi trigger podría quedar así ?

update
Ventas
set
FechaEnt = inserted.FechaEnt
where
Modulo = inserted.Modulo and
Codigo = inserted.Codigo and
Numero = inserted.Numero and
Tipo = inserted.Tipo and
CodArt = inserted.CodArt and
Item = inserted.Item and

inserted.Modulo = deleted.Modulo and
inserted.Codigo = deleted.Codigo and
inserted.Numero = deleted.Numero and
inserted.Tipo = deleted.Tipo and
inserted.CodArt = deleted.CodArt and
inserted.Item = deleted.Item and

inserted.FechEnt <> deleted.FechaEnt


saludos y gracias

Pablo

"Maxi" escribió en el mensaje
news:%
> Hola Ale, un solo comentario. Que una columna forme parte de un Update no
> quiere decir que se haya modificado realmente el dato con lo cual no es
> muy util esl uso de COLUMNS_UPDATE() :(
>
> Lo que yo hago para verificar 100% esto es comparar ese campo entre a
> tabla Inserted y Deleted y si hay diferencias entonces estoy seguro que
> hay cambios :-)
>
> En este link explico un poco mas este tema con unos ejemplos:
>
> http://www.microsoft.com/spanish/ms...art168.asp
>
>
> Salu2
> Maxi
>
>
> "Alejandro Mesa" escribió en el
> mensaje news:
>> Chequea "CREATE TRIGGER" en los libros en linea, ahi encontraras ejemplos
>> de
>> como consultar si la columna X formo parte de la sentencia UPDATE que
>> disparo
>> el trigger.
>>
>> - Para chequear una columna en especifico
>>
>> IF UPDATE (column)
>>
>> - Varias columnas
>>
>> IF (COLUMNS_UPDATED())
>>
>>
>> AMB
>>
>>
>>
>> "Mennegguzzi" wrote:
>>
>>> Hola a todos, tengo la siguiente consulta:
>>>
>>> tengo que hacer un trigger que se ejecute cuando suceda el evento Update
>>> en
>>> una determinada tabla.
>>> hasta ahí estoy bien,
>>>
>>> el tema es que necesito que el trigger se ejecute solo si el update
>>> modifica
>>> un determinado campo de esa tabla.
>>>
>>> hay alguna manera de saber que campo se está modificando ?
>>>
>>> desde ya muchas gracias por su ayuda
>>>
>>> saludos
>>>
>>> Pablo
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#8 Alejandro Mesa
30/03/2005 - 20:13 | Informe spam
Ahora comprendo porque lo quieres hacer. Necesitas cambiar la sentencia
UPDATE que posteastes, pues para hacer la union de varias tablas necesitas
usar la clausula FROM.


AMB

"Mennegguzzi" wrote:

Lo que pasa es que puede haber más de un registro con los mismos datos en estos campos, (Modulo, Codigo, Numero, Tipo, CodArt, Item), y puede ser que desde la aplicación se actualice el campo FechaEnt en uno solo de esos registros. Entonces con el trigger lo que haría es dejar el campo FechEnt igual en todos los registros que tengan los campos mencionados iguales.

saludos

Pablo


"Alejandro Mesa" escribió en el mensaje news:
> Mennegguzzi,
>
> Con este trigger estarias actualizando por segunda vez el valor de la
> columna FechaEnt, pues el valor de la columna FechaEnt ne la tabla Ventas es
> el mismo que tiene la tabla inserted.
>
> use northwind
> go
>
> create table t (
> colA int not null identity primary key,
> colB int not null
> )
> go
>
> create trigger tr_t_upd on t
> for update
> as
> set nocount on
>
> select
> t.colA,
> t.colB,
> i.colA,
> i.colB
> from
> inserted as i
> inner join
> deleted as d
> on i.colA = d.colA and i.colB <> d.colB
> inner join
> t
> on i.colA = t.colA
> go
>
> insert into t (colB) values(10)
> go
>
> update t
> set colB = 20
> where colB = 10
> go
>
> drop table t
> go
>
>
> AMB
>
> "Mennegguzzi" wrote:
>
>> Mi trigger podría quedar así ?
>>
>> update
>> Ventas
>> set
>> FechaEnt = inserted.FechaEnt
>> where
>> Modulo = inserted.Modulo and
>> Codigo = inserted.Codigo and
>> Numero = inserted.Numero and
>> Tipo = inserted.Tipo and
>> CodArt = inserted.CodArt and
>> Item = inserted.Item and
>>
>> inserted.Modulo = deleted.Modulo and
>> inserted.Codigo = deleted.Codigo and
>> inserted.Numero = deleted.Numero and
>> inserted.Tipo = deleted.Tipo and
>> inserted.CodArt = deleted.CodArt and
>> inserted.Item = deleted.Item and
>>
>> inserted.FechEnt <> deleted.FechaEnt
>>
>>
>> saludos y gracias
>>
>> Pablo
>>
>> "Maxi" escribió en el mensaje
>> news:%
>> > Hola Ale, un solo comentario. Que una columna forme parte de un Update no
>> > quiere decir que se haya modificado realmente el dato con lo cual no es
>> > muy util esl uso de COLUMNS_UPDATE() :(
>> >
>> > Lo que yo hago para verificar 100% esto es comparar ese campo entre a
>> > tabla Inserted y Deleted y si hay diferencias entonces estoy seguro que
>> > hay cambios :-)
>> >
>> > En este link explico un poco mas este tema con unos ejemplos:
>> >
>> > http://www.microsoft.com/spanish/ms...art168.asp
>> >
>> >
>> > Salu2
>> > Maxi
>> >
>> >
>> > "Alejandro Mesa" escribió en el
>> > mensaje news:
>> >> Chequea "CREATE TRIGGER" en los libros en linea, ahi encontraras ejemplos
>> >> de
>> >> como consultar si la columna X formo parte de la sentencia UPDATE que
>> >> disparo
>> >> el trigger.
>> >>
>> >> - Para chequear una columna en especifico
>> >>
>> >> IF UPDATE (column)
>> >>
>> >> - Varias columnas
>> >>
>> >> IF (COLUMNS_UPDATED())
>> >>
>> >>
>> >> AMB
>> >>
>> >>
>> >>
>> >> "Mennegguzzi" wrote:
>> >>
>> >>> Hola a todos, tengo la siguiente consulta:
>> >>>
>> >>> tengo que hacer un trigger que se ejecute cuando suceda el evento Update
>> >>> en
>> >>> una determinada tabla.
>> >>> hasta ahí estoy bien,
>> >>>
>> >>> el tema es que necesito que el trigger se ejecute solo si el update
>> >>> modifica
>> >>> un determinado campo de esa tabla.
>> >>>
>> >>> hay alguna manera de saber que campo se está modificando ?
>> >>>
>> >>> desde ya muchas gracias por su ayuda
>> >>>
>> >>> saludos
>> >>>
>> >>> Pablo
>> >>>
>> >>>
>> >>>
>> >
>> >
>>
>>
>>
Respuesta Responder a este mensaje
#9 Alejandro Mesa
30/03/2005 - 20:57 | Informe spam
Trata,

update
v
set
v.FechaEnt = i.FechaEnt
from
inserted i inner join deleted d on
i.Modulo = d.Modulo and
i.Codigo = d.Codigo and
i.Numero = d.Numero and
i.Tipo = d.Tipo and
i.CodArt = d.CodArt and
i.Item = d.Item and
i.FechEnt <> d.FechaEnt
inner join
Ventas as v
on v.Modulo = i.Modulo and
v.Codigo = i.Codigo and
v.Numero = i.Numero and
v.Tipo = i.Tipo and
v.CodArt = i.CodArt and
v.Item = i.Item;


AMB


"Mennegguzzi" wrote:

uuff, ahí me diste en mi talón de aquiles, estaría bien así ?

update
Ventas
set
FechaEnt = i.FechaEnt
from
inserted i inner join deleted d on
i.Modulo = d.Modulo and
i.Codigo = d.Codigo and
i.Numero = d.Numero and
i.Tipo = d.Tipo and
i.CodArt = d.CodArt and
i.Item = d.Item and
i.FechEnt <> d.FechaEnt
where
Modulo = i.Modulo and
Codigo = i.Codigo and
Numero = i.Numero and
Tipo = i.Tipo and
CodArt = i.CodArt and
Item = i.Item

saludos y gracias


"Alejandro Mesa" escribió en el mensaje news:
> Ahora comprendo porque lo quieres hacer. Necesitas cambiar la sentencia
> UPDATE que posteastes, pues para hacer la union de varias tablas necesitas
> usar la clausula FROM.
>
>
> AMB
>
> "Mennegguzzi" wrote:
>
>> Lo que pasa es que puede haber más de un registro con los mismos datos en estos campos, (Modulo, Codigo, Numero, Tipo, CodArt, Item), y puede ser que desde la aplicación se actualice el campo FechaEnt en uno solo de esos registros. Entonces con el trigger lo que haría es dejar el campo FechEnt igual en todos los registros que tengan los campos mencionados iguales.
>>
>> saludos
>>
>> Pablo
>>
>>
>> "Alejandro Mesa" escribió en el mensaje news:
>> > Mennegguzzi,
>> >
>> > Con este trigger estarias actualizando por segunda vez el valor de la
>> > columna FechaEnt, pues el valor de la columna FechaEnt ne la tabla Ventas es
>> > el mismo que tiene la tabla inserted.
>> >
>> > use northwind
>> > go
>> >
>> > create table t (
>> > colA int not null identity primary key,
>> > colB int not null
>> > )
>> > go
>> >
>> > create trigger tr_t_upd on t
>> > for update
>> > as
>> > set nocount on
>> >
>> > select
>> > t.colA,
>> > t.colB,
>> > i.colA,
>> > i.colB
>> > from
>> > inserted as i
>> > inner join
>> > deleted as d
>> > on i.colA = d.colA and i.colB <> d.colB
>> > inner join
>> > t
>> > on i.colA = t.colA
>> > go
>> >
>> > insert into t (colB) values(10)
>> > go
>> >
>> > update t
>> > set colB = 20
>> > where colB = 10
>> > go
>> >
>> > drop table t
>> > go
>> >
>> >
>> > AMB
>> >
>> > "Mennegguzzi" wrote:
>> >
>> >> Mi trigger podría quedar así ?
>> >>
>> >> update
>> >> Ventas
>> >> set
>> >> FechaEnt = inserted.FechaEnt
>> >> where
>> >> Modulo = inserted.Modulo and
>> >> Codigo = inserted.Codigo and
>> >> Numero = inserted.Numero and
>> >> Tipo = inserted.Tipo and
>> >> CodArt = inserted.CodArt and
>> >> Item = inserted.Item and
>> >>
>> >> inserted.Modulo = deleted.Modulo and
>> >> inserted.Codigo = deleted.Codigo and
>> >> inserted.Numero = deleted.Numero and
>> >> inserted.Tipo = deleted.Tipo and
>> >> inserted.CodArt = deleted.CodArt and
>> >> inserted.Item = deleted.Item and
>> >>
>> >> inserted.FechEnt <> deleted.FechaEnt
>> >>
>> >>
>> >> saludos y gracias
>> >>
>> >> Pablo
>> >>
>> >> "Maxi" escribió en el mensaje
>> >> news:%
>> >> > Hola Ale, un solo comentario. Que una columna forme parte de un Update no
>> >> > quiere decir que se haya modificado realmente el dato con lo cual no es
>> >> > muy util esl uso de COLUMNS_UPDATE() :(
>> >> >
>> >> > Lo que yo hago para verificar 100% esto es comparar ese campo entre a
>> >> > tabla Inserted y Deleted y si hay diferencias entonces estoy seguro que
>> >> > hay cambios :-)
>> >> >
>> >> > En este link explico un poco mas este tema con unos ejemplos:
>> >> >
>> >> > http://www.microsoft.com/spanish/ms...art168.asp
>> >> >
>> >> >
>> >> > Salu2
>> >> > Maxi
>> >> >
>> >> >
>> >> > "Alejandro Mesa" escribió en el
>> >> > mensaje news:
>> >> >> Chequea "CREATE TRIGGER" en los libros en linea, ahi encontraras ejemplos
>> >> >> de
>> >> >> como consultar si la columna X formo parte de la sentencia UPDATE que
>> >> >> disparo
>> >> >> el trigger.
>> >> >>
>> >> >> - Para chequear una columna en especifico
>> >> >>
>> >> >> IF UPDATE (column)
>> >> >>
>> >> >> - Varias columnas
>> >> >>
>> >> >> IF (COLUMNS_UPDATED())
>> >> >>
>> >> >>
>> >> >> AMB
>> >> >>
>> >> >>
>> >> >>
>> >> >> "Mennegguzzi" wrote:
>> >> >>
>> >> >>> Hola a todos, tengo la siguiente consulta:
>> >> >>>
>> >> >>> tengo que hacer un trigger que se ejecute cuando suceda el evento Update
>> >> >>> en
>> >> >>> una determinada tabla.
>> >> >>> hasta ahí estoy bien,
>> >> >>>
>> >> >>> el tema es que necesito que el trigger se ejecute solo si el update
>> >> >>> modifica
>> >> >>> un determinado campo de esa tabla.
>> >> >>>
>> >> >>> hay alguna manera de saber que campo se está modificando ?
>> >> >>>
>> >> >>> desde ya muchas gracias por su ayuda
>> >> >>>
>> >> >>> saludos
>> >> >>>
>> >> >>> Pablo
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >
>> >> >
>> >>
>> >>
>> >>
Respuesta Responder a este mensaje
#10 Maxi
30/03/2005 - 22:04 | Informe spam
Tenes razion, no dije que hayas dicho lo contrario, solo lo mio fue una
aclaracion para que nuestro amigo pueda comprender bien el problema.


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Maxi,

Yo no he dicho lo contrario. Eso ya depende de las reglas de negocio o
necesidades del usuario. Esto puede ser tan sencillo como chequear que la
columna formo parte de la sentencia UPDATE o tan complejo como chequear
que
el valor de una columna tipo VARCHAR con intercalacion no sensitiva cambio
su
valor de minusculas a mayusculas, cosa que con una simple comparacion
i.colA
!= d.colA no se detectaria, lo mismo pasaria cuando la columna permite el
valor NULL o cuando la columna en question es tipo FLOAT, pues Microsoft
recomienda evitar el uso de este tipo de columnas en comparasiones de
igualdad o desigualdad en la clausula WHERE (Ve "Using float and real
Data"
en los libros en linea). De todas manera agradezco tu comentario.


AMB

"Maxi" wrote:

Hola Ale, un solo comentario. Que una columna forme parte de un Update no
quiere decir que se haya modificado realmente el dato con lo cual no es
muy
util esl uso de COLUMNS_UPDATE() :(

Lo que yo hago para verificar 100% esto es comparar ese campo entre a
tabla
Inserted y Deleted y si hay diferencias entonces estoy seguro que hay
cambios :-)

En este link explico un poco mas este tema con unos ejemplos:

http://www.microsoft.com/spanish/ms...art168.asp


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
> Chequea "CREATE TRIGGER" en los libros en linea, ahi encontraras
> ejemplos
> de
> como consultar si la columna X formo parte de la sentencia UPDATE que
> disparo
> el trigger.
>
> - Para chequear una columna en especifico
>
> IF UPDATE (column)
>
> - Varias columnas
>
> IF (COLUMNS_UPDATED())
>
>
> AMB
>
>
>
> "Mennegguzzi" wrote:
>
>> Hola a todos, tengo la siguiente consulta:
>>
>> tengo que hacer un trigger que se ejecute cuando suceda el evento
>> Update
>> en
>> una determinada tabla.
>> hasta ahí estoy bien,
>>
>> el tema es que necesito que el trigger se ejecute solo si el update
>> modifica
>> un determinado campo de esa tabla.
>>
>> hay alguna manera de saber que campo se está modificando ?
>>
>> desde ya muchas gracias por su ayuda
>>
>> saludos
>>
>> Pablo
>>
>>
>>



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