Implementar desencadenadores DML

Antes de crear un desencadenador DML, tenga en cuenta que:

  • La instrucción CREATE TRIGGER debe ser la primera del lote. Las demás instrucciones del lote se interpretan como parte de la definición de la instrucción CREATE TRIGGER.

  • De forma predeterminada, el permiso para crear un desencadenador DML corresponde al propietario de la tabla, que no puede transferirlo a otros usuarios.

  • Los desencadenadores DML son objetos de base de datos y sus nombres deben ajustarse a las reglas definidas para los identificadores.

  • Sólo se pueden crear desencadenadores DML en la base de datos actual, aunque un desencadenador DML puede hacer referencia a objetos que se encuentren fuera de esta base de datos.

  • No es posible crear un desencadenador DML en una tabla temporal o del sistema, aunque los desencadenadores DML pueden hacer referencia a tablas temporales. No se debe hacer referencia a las tablas del sistema; en su lugar, utilice las vistas de esquema de información.

  • No se puede definir desencadenadores INSTEAD OF DELETE o INSTEAD OF UPDATE en una tabla con una clave externa definida con una acción DELETE o UPDATE.

  • Aunque una instrucción TRUNCATE TABLE sea como una instrucción DELETE sin la cláusula WHERE (elimina todas las filas), no provoca la activación de los desencadenadores DELETE, porque es una instrucción que no se registra.

  • La instrucción WRITETEXT no provoca la activación de los desencadenadores INSERT ni UPDATE.

Nota importanteImportante

La capacidad de devolver conjuntos de resultados desde desencadenadores se eliminará en una versión posterior de SQL Server. Los desencadenadores que devuelven conjuntos de resultados pueden provocar un comportamiento inesperado en aplicaciones que no estén diseñadas para utilizarlos. Evite la devolución de conjuntos de resultados desde desencadenadores en los nuevos trabajos de desarrollo y piense en modificar las aplicaciones que la usan actualmente. Para evitar que los desencadenadores devuelvan conjuntos de resultados en SQL Server, asigne el valor 1 a la opción disallow results from triggers (opción). El valor predeterminado de esta opción será 1 en una versión futura de SQL Server.

Cuando cree un desencadenador DML, especifique:

  • El nombre.

  • La tabla en la que se define el desencadenador.

  • El momento de activar el desencadenador.

  • Las instrucciones de modificación de datos que activarán el desencadenador. Son opciones válidas: INSERT, UPDATE o DELETE. Varias instrucciones de modificación de datos pueden activar el mismo desencadenador. Por ejemplo, se puede activar un desencadenador mediante instrucciones INSERT y UPDATE.

  • Las instrucciones de programación que realizan la acción desencadenadora.

Varios desencadenadores DML

Una tabla puede tener varios desencadenadores AFTER de un tipo determinado, siempre que tengan nombres distintos. Todo desencadenador puede llevar a cabo numerosas funciones. Sin embargo, sólo se puede aplicar a una tabla. Por otra parte, un único desencadenador puede aplicarse a cualquier subconjunto de las tres acciones del usuario (UPDATE, INSERT y DELETE).

Una tabla sólo puede tener un desencadenador INSTEAD OF de un tipo determinado.

Permisos y propiedad de un desencadenador

Los desencadenadores se crean en el esquema de la tabla o vista en la que están definidos. Por ejemplo, si el desencadenador Trigger1 se crea en una tabla HumanResources.Employee, el nombre completo del esquema del desencadenador es HumanResources.Trigger1.

De forma predeterminada, los permisos CREATE TRIGGER son del propietario de la tabla en la que se ha definido el desencadenador, de la función de servidor fija sysadmin y de los miembros de funciones fijas de base de datos db_owner y db_ddladmin, y no se pueden transferir.

Al crear un desencadenador INSTEAD OF en una vista, la cadena de propiedad se rompe si el propietario de la vista no es también propietario de las tablas base a las que hacen referencia tanto la vista como el desencadenador. Para cualquier tabla base que no pertenezca al propietario de la vista, el propietario de la tabla deberá conceder los permisos necesarios por separado, a fin de que cualquier usuario pueda leer o actualizar la vista. Si ésta y las tablas base subyacentes pertenecen al mismo usuario, será necesario conceder permisos a otros usuarios sólo para la vista, no para las tablas base individuales. Para obtener más información, vea Cadenas de propiedad.

Para crear un desencadenador