Cuando hacemos sistemas medianos a grandes es común encontrarse con que necesitamos cubrir reglas de negocios, accionando contra algunos eventos o validando situaciones, en muchos casos necesitaremos conocer si valor de una columna (más atómico que saber si se agrego o eliminó un registro) fue alterado o no.
Lo que hagamos ante este evento ya depende del contexto en el que se encuentra el sistema, pero puedo mostrarles como saber si esto sucede y existe 2 maneras ortodoxas de hacerlo, también veremos cual nos conviene utilizar en cada caso.
En SQL Server los triggers (desencadenadores) nos ayudarán a ello, siempre y cuando los eventos que reacciones tales triggers sean de INSERT o UPDATE.
La primer forma que tenemos de evaluar es preguntando si los valores de las columnas de las tablas virtuales INSERTED y DELETED son distintos. Se debe tener en cuenta que si se ejecuto un Update sobre esta columna y el valor nuevo es igual a lo que contenia no reaccionaría.
1 2 3 4 5 6 7 8 9 10 | ALTER TRIGGER [dbo].[TriggerIUTabla] ON [dbo].[Tabla] AFTER UPDATE, INSERT AS BEGIN if ((select ColumnaEnCuestion from inserted) <> (select ColumnaEnCuestion from deleted)) begin -- hacemos algo end END |
La segunda manera es preguntando si la columna fue alterada por una instrucción UPDATE O INSERT. Esta reacciona aunque los valores nuevos sean iguales que los viejos
1 2 3 4 5 6 7 8 9 10 | ALTER TRIGGER [dbo].[TriggerIUTabla] ON [dbo].[Tabla] AFTER INSERT, UPDATE AS BEGIN if (update(ColumnaEnCuestion)) begin -- hacemos algo end END |








en
en
en
en
en
Gracias, me sirvió la información.
Saludos!!
… alguien conoce algun Motor BD que lance triggers a nivel de Columna?… mas que interesante el punto tocado…