sp_settriggerorder (Transact-SQL)

Actualizado: 12 de diciembre de 2006

Especifica los desencadenadores AFTER que se activan en primer o último lugar. Los desencadenadores AFTER que se activan entre el primero y el último se ejecutan en orden indefinido.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername' 
        , [ @order = ] 'value' 
        , [ @stmttype = ] 'statement_type' 
        [ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]

Argumentos

  • [ @triggername= ] '[ triggerschema**.****] triggername**'**
    Es el nombre del desencadenador y el esquema al que pertenece, si procede, cuyo orden se va a establecer o cambiar. [triggerschema**.**]triggername es de tipo sysname. Si el nombre no corresponde a un desencadenador o si corresponde a un desencadenador INSTEAD OF, el procedimiento devolverá un error. triggerschema no se puede especificar para los desencadenadores DDL o logon.
  • [ @order= ] 'value'
    Es el valor del nuevo orden del desencadenador. value es de tipo varchar(10) y puede tener uno de los siguientes valores.

    ms186762.note(es-es,SQL.90).gifImportante:
    Los desencadenadores First y Last deben ser diferentes.
    Valor Descripción

    First

    El desencadenador se activa primero.

    Last

    El desencadenador se activa el último.

    None

    El desencadenador se activa sin un orden definido.

  • [ @stmttype= ] 'statement_type'
    Especifica la instrucción SQL que activa el desencadenador. statement_type es de tipo varchar(50) y puede ser INSERT, UPDATE, DELETE, LOGON o cualquier evento de instrucción Transact-SQL que aparezca en Usar eventos de DDL con desencadenadores DDL. Los grupos de eventos no se pueden especificar.

    Un desencadenador puede designarse como First o Last para un tipo de instrucción sólo después de haber definido ese desencadenador como desencadenador para ese tipo de instrucción. Por ejemplo, el desencadenador TR1 puede designarse como First para INSERT en la tabla T1 si TR1 se define como desencadenador INSERT. El SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) devolverá un error si TR1, que se ha definido sólo como desencadenador INSERT, se establece en un desencadenador First o Last para una instrucción UPDATE. Para obtener más información, vea la sección Notas.

  • @namespace= { 'DATABASE' | 'SERVER' | NULL }
    Cuando triggername es un desencadenador DDL o logon, especifica si triggername se creó con un ámbito de base de datos o de servidor. Observe que los desencadenadores logon se pueden crear únicamente con ámbito de servidor. Para obtener más información acerca del ámbito de los desencadenadores DDL, vea Diseñar desencadenadores DDL. Si no se especifica, o bien si se especifica NULL, triggername es un desencadenador DML.

Notas

Sólo puede haber un desencadenador First y otro Last para cada instrucción en la misma tabla.

Si ya hay un desencadenador First definido en la tabla, base de datos o servidor, no podrá designar un nuevo desencadenador como First para el mismo statement_type en la misma tabla, base de datos o servidor. Esta restricción también se aplica a los desencadenadores Last.

La réplica genera automáticamente un primer desencadenador para cualquier tabla incluida en una suscripción de actualización inmediata o en cola. La réplica 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. Si utiliza ALTER TRIGGER en el desencadenador de réplica o utiliza sp_settriggerorder para convertir al desencadenador de réplica en un desencadenador Last o None, la suscripción no funcionará correctamente.

Si una instrucción ALTER TRIGGER cambia un desencadenador primero o último, se quitará el atributo First o Last establecido originalmente y el valor se reemplazará por None. El valor del orden deberá restablecerse con sp_settriggerorder.

Si el mismo desencadenador tiene que designarse como el orden primero o último para más de un tipo instrucción, deberá ejecutarse sp_settriggerorder para cada tipo de instrucción. Además, el desencadenador deberá definirse primero para un tipo de instrucción para que pueda designarse como el desencadenador First o Last que debe activarse para el tipo de instrucción.

Permisos

Para establecer el orden de un desencadenador DDL o logon con ámbito de servidor (creado ON ALL SERVER), se requiere el permiso CONTROL SERVER.

Para establecer el orden de un desencadenador DDL con un ámbito de base de datos (creado ON DATABASE), se necesita el permiso ALTER ANY DATABASE DDL TRIGGER.

Para establecer el orden de un desencadenador DML, se necesita el permiso ALTER para la tabla o vista en la que está definido el desencadenador.

Valores de código de retorno

0 (correcto) y 1 (error)

Ejemplos

A. Configurar el orden de activación de un desencadenador DML

En el siguiente ejemplo se especifica que uSalesOrderHeader sea el primer desencadenador que se active después de que se produzca una operación UPDATE en la tabla Sales.SalesOrderHeader.

USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';

B. Configurar el orden de activación de un desencadenador DDL

El siguiente ejemplo especifica que ddlDatabaseTriggerLog sea el primer desencadenador que se active después de que se produzca un evento ALTER_TABLE en la tabla AdventureWorks.

USE AdventureWorks;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';

Vea también

Referencia

Procedimientos almacenados del sistema (Transact-SQL)
Procedimientos almacenados del motor de base de datos (Transact-SQL)
ALTER TRIGGER (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido nuevo:
  • Se ha agregado información a lo largo del tema acerca de los desencadenadores logon, que se introdujeron en el Service Pack 2 de SQL Server 2005.