¿Diferencia entre los activadores FOR y AFTER?

Respuestas:

153

No hay diferencia, hacen lo mismo.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

Es lo mismo que

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

Un INSTEAD OFdisparador es diferente y se dispara antes y en lugar de la inserción y se puede utilizar en las vistas para insertar los valores adecuados en las tablas subyacentes.

Ben
fuente
14
Me gustó el comentario sobre inserciones en vistas usando activadores. Información muy útil. Salud.
Mariusz
Disculpe, señor @Ben, ¿cuál sería el escenario para insertar en una vista? Gracias ^ - ^
Jeancarlo Fontalvo
@JeancarloFontalvo, 1) compatibilidad. Las tablas subyacentes pueden cambiar siempre que la vista siga siendo la misma. 2) control de acceso, ciertos usuarios pueden tener permiso para escribir solo en ciertas columnas.
Ben
17

@Ben tiene toda la razón.

Aquí está el artículo de MSDN Exploring SQL Server Triggers

Un párrafo del artículo:

Esa sintaxis también es aceptable en versiones anteriores de SQL Server. Sin embargo, ahora que hay dos tipos de disparadores en SQL Server 2000, prefiero referirme a los disparadores FOR como disparadores AFTER. Por lo tanto, durante el resto de este artículo me referiré a los desencadenantes DESPUÉS o EN VEZ DE.

Al igual que el activador AFTER que vio anteriormente, este activador evita que se realicen cambios en el campo de apellido. Sin embargo, implementa esta regla empresarial de forma diferente al ejemplo anterior. Debido a que el desencadenador INSTEAD OF se activa en lugar de la instrucción UPDATE, el desencadenador INSTEAD OF evalúa si la prueba de la regla de negocio pasa o no. Si la prueba de la regla de negocio pasa, para que ocurra la actualización, el disparador INSTEAD OF debe invocar explícitamente la instrucción UPDATE nuevamente.

Waqas Raja
fuente
4

AFTER especifica que el desencadenante DML se activa solo cuando todas las operaciones especificadas en la instrucción SQL desencadenante se han ejecutado correctamente. Todas las acciones en cascada referenciales y las comprobaciones de restricciones también deben tener éxito antes de que se active este disparador. AFTER es el valor predeterminado cuando FOR es la única palabra clave especificada.

DESPUÉS de que los activadores no se pueden definir en las vistas.

INSTEAD OF Especifica que el desencadenante DML se ejecuta en lugar de la sentencia SQL desencadenante, por lo tanto, anula las acciones de las sentencias desencadenantes. INSTEAD OF no se puede especificar para DDL o activadores de inicio de sesión.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql

Nour El-Hoda
fuente
1
Esta expresión "DESPUÉS es el valor predeterminado cuando FOR es la única palabra clave especificada". es muy confuso. Podrían haberlo redactado mejor.
FMFF