Ejecutar un trigger solamente tras la actualización de una columna (SQL SERVER)

publicado por: Anonymous

Quiero que el trigger que estoy creando ejecute un código solamente en la actualización de cierta columna. Hasta ahora lo que se me ocurre y he encontrado es:

CREATE TRIGGER <nombreTrigger>
ON <nombreBD>.dbo.<nombreTabla>
AFTER UPDATE
AS
  IF UPDATE (<nombreColumna>)
  BEGIN
    ...
  END
END

Sin embargo, siento como si esto fuese una especie de “parche” y buscaría una solución donde pueda directamente especificar que el trigger se ejecute en la actualización de este campo <nombreColumna>

solución

Alberto, la ejecución de los triggers en SQL Server es a nivel de fila/registro, de hecho en otros motores como Oracle la mecánica es similar. ¿Por qué a nivel de fila y no a nivel de columna? es una buena pregunta, como para hacer una nueva. Imagino que un tema puede ser de rendimiento, mantener TRIGGERs a nivel de columna puede ser más costoso. Lo concreto que la forma en que estás planteando el TRIGGER es la correcta y en realidad la única. Una sola aclaración, que puede resultar obvia para algunos: En SQL Server los triggers se “ejecutan” por el “lote” de UPDATEINSERTDELETE (Statement level), es decir si actualizamos un conjunto de registros con una única sentencia, el TRIGGER se ejecutará una única vez y no por cada fila (row level), por lo que la lógica del mismo debe estar preparada para considerar múltiples registros.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *