2012-07-03 13 views
5

He creado un gatillo on update.¿Con qué frecuencia se activan las activaciones de actualización en una actualización de múltiples registros?

Si estoy actualizando 5 registros en la tabla en una sola declaración, ¿cuántas veces se ejecutará el desencadenador? ¿Cambia si tengo varias instrucciones actualizando los registros en una sola transacción?

¿Se ejecuta 5 veces, o solo una vez después de que se hayan completado todas las transacciones?

+3

¿Qué servidor de base de datos está utilizando? Oracle, Sybase, SqlServer, ¿otro? –

+1

¿Qué RDBMS estás usando? De todos modos, si su actualización es una transacción, independientemente de cuántos registros se actualicen (bueno, si es al menos uno), el desencadenador se ejecutará una vez – Lamak

+1

@Lamak: no es verdadero. Depende de si es un nivel de fila o un desencadenante de nivel de extracto (por supuesto, también depende del DBMS, algunos no admiten activadores de nivel de fila) –

Respuesta

9

Todo depende del tipo de disparador que esté utilizando.

  • una fila nivel de activación se activará para todos y cada fila que se ve afectado por la instrucción DML (tenga en cuenta que esto también es cierto para INSERT afirmaciones que se basan en un SELECT o está utilizando una sintaxis de varias filas para insertar más de una fila a la vez)
  • un desencadenante de nivel de instrucción se activará una vez para toda la instrucción.

Oracle, PostgreSQL y DB2 son compatibles con el nivel de fila y los desencadenadores de nivel de instrucción. Microsoft SQL Server solo admite desencadenadores de nivel de instrucción y MySQL solo admite desencadenadores de nivel de fila.

0

Considerando que está utilizando SQL Server, el desencadenador solo se activará una vez por cada actualización.

Si esto no es lo que desea, podría considerar utilizar diferentes instrucciones de actualización para asegurarse de que el desencadenador se active siempre.

Puede consultar this turorial en los desencadenadores de SQL. Cubre todo.

Tenga en cuenta que si utiliza Oracle, el desencadenador puede basarse en filas. No en SQL Server.

2

Con SQL 2008: Si está realizando 1 actualización que actualiza 5 filas, el desencadenador debe ejecutarse solo una vez.

Es por eso que debe usar las tablas "INSERTED" y "DELETED" para poder detectar todas las filas modificadas.

Si está realizando 5 actualizaciones que actualizan 1 fila, el desencadenador se ejecutará 5 veces.

Cuestiones relacionadas