¿Cómo entender los desencadenantes recursivos? ¿Cómo configurar el disparador recursivo para que surta efecto?
En SQL Server 2000, de forma predeterminada, un desencadenador no se llama a sí mismo de forma recursiva a menos que el administrador de la base de datos establezca por separado la opción de base de datos RECURSIVE_TRIGGERS.
Los disparadores tienen dos métodos recursivos diferentes, recursividad directa y recursividad indirecta.
1. Recursividad directa
Cuando un disparador se activa y realiza una operación, la operación utiliza el mismo disparador para realizar la operación nuevamente, esto se llama recursividad directa.
Usando la recursividad directa de disparadores, al eliminar un registro en la tabla, todos los registros con el mismo número en la tabla se eliminan a través del disparador.
2. Recursividad indirecta
Cuando los datos de la Tabla 1 cambian, el disparador se activa y realiza una operación, que a su vez activa otro disparador de la Tabla 2. Este disparador en la Tabla 2 actualiza la Tabla 1, activando así nuevamente el disparador en la Tabla 1. Esto se llama recursividad indirecta.
Por ejemplo, una aplicación actualiza la tabla TA y activa el disparador_a. Trigger_A actualiza la tabla TB, lo que activa el disparador_B. Trigger_B a su vez actualiza la tabla ta, de modo que Trigger_A se activa de nuevo de forma indirecta y recursiva.
Puede desactivar la recursividad directa utilizando el procedimiento almacenado del sistema sp_dboption, pero esto activa la recursividad indirecta. Para desactivar estos dos tipos de recursividad, utilice el procedimiento almacenado del sistema sp_configure.