Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
Puede especificar que uno de los disparadores AFTER asociados a una tabla sea el primer disparador AFTER o el último disparador AFTER que se active para cada una de las acciones de activación INSERT, DELETE y UPDATE. Los desencadenadores AFTER que se activan entre el primero y el último se ejecutan en un orden indefinido.
Para especificar el orden de un disparador AFTER, use el procedimiento almacenado sp_settriggerorder. sp_settriggerorder tiene las opciones siguientes.
| Opción | Descripción |
|---|---|
| First | Especifica que el desencadenador DML es el primer desencadenador AFTER que se activa para una acción desencadenadora. |
| Último | Especifica que el desencadenador DML es el último desencadenador AFTER que se activa para una acción desencadenadora. |
| None | Especifica que no hay ningún orden determinado para la activación del desencadenador DML. Se utiliza principalmente para restablecer un desencadenador que era el primero o el último. |
En el siguiente ejemplo se muestra el uso de sp_settriggerorder:
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Importante
Los desencadenadores primero y último deben ser dos desencadenadores DML diferentes.
Una tabla puede tener definidos al mismo tiempo los desencadenadores INSERT, UPDATE y DELETE. Cada tipo de sentencia puede tener su propio primer y último desencadenador, pero no pueden ser el mismo.
Si el primer o último desencadenador definido para una tabla no cubre una acción de desencadenamiento, como no cubrir FOR UPDATE, FOR DELETEo FOR INSERT, no hay ningún desencadenador primero o último para las acciones que faltan.
No se pueden especificar desencadenadores INSTEAD OF como primero ni último desencadenador. Los desencadenadores INSTEAD OF se activan antes de actualizar las tablas subyacentes. Si un desencadenador INSTEAD OF efectúa actualizaciones en las tablas subyacentes, las actualizaciones se producen antes de que se activen los desencadenadores AFTER definidos en la tabla. Por ejemplo, si un desencadenador INSTEAD OF INSERT en una vista inserta datos en una tabla base y la propia tabla base contiene un desencadenador INSTEAD OF INSERT y tres desencadenadores AFTER INSERT , el desencadenador INSTEAD OF INSERT en la tabla base se desencadena en lugar de la acción de inserción y los desencadenadores AFTER de la tabla base se activan después de cualquier acción de inserción en la tabla base. Para más información, consulte DML Triggers.
Si una ALTER TRIGGER instrucción cambia un primer o último desencadenador, se quita el atributo First o Last y el valor de orden se establece en None. Para restablecer el orden, se debe usar sp_settriggerorder.
La función OBJECTPROPERTY informa si un trigger es el primero o el último trigger mediante las siguientes propiedades: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggery ExecIsLastDeleteTrigger.
La replicación genera automáticamente un primer desencadenador para cualquier tabla incluida en una suscripción de actualización inmediata o en cola. La replicación requiere que su desencadenador sea el primero. Generará un error si se intenta incluir una tabla con un primer desencadenador en una suscripción de actualización inmediata o en cola. Si intenta convertir un desencadenador en el primero después de haber incluido una tabla en una suscripción, sp_settriggerorder devolverá un error. Tanto si usa ALTER en el desencadenador de replicación como si usa sp_settriggerorder para convertir el desencadenador de replicación en un desencadenador último o sin orden definido, la suscripción no funcionará correctamente.
Consulte también
OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL)