post icon

Como verificar si se actualizó o no una columna en SQL Server

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

Comentarios desde Facebook:

  1. avatar
    Isidro Ruiz Mozilla Firefox Windows
    12 Julio 2011 at 16:59 #

    Gracias, me sirvió la información.

    Saludos!!

  2. avatar
    JC PARAGUAY Mozilla Firefox Windows
    14 Septiembre 2010 at 14:05 #

    … alguien conoce algun Motor BD que lance triggers a nivel de Columna?… mas que interesante el punto tocado…

Responder