20 agosto 2010

CREATE TRIGGER: FOR o AFTER



Cual es la diferencia entre los TRIGGERS declarados como FOR y los declarados como AFTER?

Ninguna, resulta que por algún motivo los muchachos de Microsoft nos dieron dos opciones de declarar triggers y ambas se comportan igual, leer la documentacion de SQL SERVER tampoco ayuda mucho, la sintaxis de la declaracion de un trigger nos dice que podemos usar una forma u otra:

CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }...
Y cuando me voy a mirar la explicacion de FOR|AFTER, me encuentro con que:

FOR | AFTER

AFTER specifies that the DML trigger is fired only when all operations specified in the triggering SQL statement have executed successfully. All referential cascade actions and constraint checks also must succeed before this trigger fires.

AFTER is the default when FOR is the only keyword specified.

Entonces no se tu pero yo entiendo que AFTER es solamente otra forma de decir FOR, es como cuando le pones SELECT TOP 100 PERCENT... si no le pusieras el "TOP 100 PERCENT" haria lo mismo.

En conclusión, yo siempre uso el AFTER, hace lo mismo pero cuando miras la declaración sabes a la primera que ese trigger se ejecuta después de.

La imagen me la encontré aqui