2011-10-19 11 views
7

Parece que están permitidos ya que puedo ver mis dos activadores de inserción enumerados debajo de la tabla con diferentes nombres. ¿Es común o una mala práctica? Estoy usando SQL Server 2005¿Puedo tener dos disparadores de inserción diferentes en la misma tabla?

+0

¿Qué hacen los factores desencadenantes? La tabla 'INSERTED' no está indexada, por lo que, por razones de rendimiento, es mejor consolidarlos. –

Respuesta

11

Sí, definitivamente puede tener más de un activador para cada operación, p. AFTER INSERT o AFTER UPDATE etc. Tiene sentido dividir preocupaciones separadas en trozos de código separados, pequeños y manejables.

Lo único que no puede confiar es que se ejecutarán en un orden determinado: el orden en el que se ejecutan realmente los desencadenadores tampoco tiene que ser estable, es decir, lo mismo cada vez.

+3

Depende de RDBMS. Postgres garantiza que se llaman múltiples activadores en orden alfabético de nombre. Dicen que el estándar SQL (pocas veces seguido) está en orden de creación. –

+1

@AndrewLazarus: me refería a SQL Server (ya que OP me preguntó al respecto), y SQL Server no tiene esa capacidad. Gracias por señalar eso! –

+0

Absolutamente. A menudo agrego notas como las que dicen que la gente aterriza aquí desde Google mucho. –

2

es una buena práctica porque luego puede descomponer los cambios con el tiempo en pequeños fragmentos (ágiles) y agregarlos o eliminarlos independientemente el uno del otro.

+0

BTW si inserto 2 o más filas a la vez (básicamente, estoy importando un montón de registros), ¿hay alguna manera de poder hacer referencia a CADA inserto, o el desencadenante se ejecuta automáticamente para cada inserción individual? –

+1

El activador @hmd se ejecutará automáticamente para cada inserción hasta el momento y a menos que esté utilizando inserciones masivas en las que se ejecutará el desencadenante una vez por cada comando de inserción masiva. – Niraj

+0

¡Sé que es una vieja pregunta! En su activador siempre puede hacer referencia a una tabla llamada "insertado" que contiene todas las filas que acaba de insertar (que son una o más filas en un desencadenador de inserción). Y al crear cursores puede recorrer cada una de sus filas y hacer cosas si lo desea. – olf

Cuestiones relacionadas