Descripción de los desencadenadores DDL frente a los desencadenadores DML

Los desencadenadores DDL y DML se utilizan con finalidades distintas.

Los desencadenadores DML funcionan con las instrucciones INSERT, UPDATE y DELETE, y permiten exigir las reglas de negocios y extender la integridad de los datos cuando se modifican datos en tablas o vistas.

Los desencadenadores DDL funcionan en instrucciones DDL CREATE, ALTER, DROP entre otras, y en procedimientos almacenados que realizan operaciones similares a DDL.Se utilizan para realizar tareas administrativas y exigir las reglas de negocios que afectan a las bases de datos. Se aplican a todos los comandos de un solo tipo en toda una base de datos o todo un servidor.

Los desencadenadores DDL y DML se crean, modifican y quitan con una sintaxis Transact-SQL similar y tienen un comportamiento parecido.

Al igual que los desencadenadores DML, los DDL pueden ejecutar código administrado empaquetado en un ensamblado creado en Microsoft.NET Framework y cargado en SQL Server. Para obtener más información, vea Programar desencadenadores CLR.

Al igual que los desencadenadores DML, se pueden crear varios desencadenadores DDL en la misma instrucción Transact-SQL. Asimismo, un desencadenador DDL y la instrucción que lo activa se ejecutan en la misma transacción. Esta transacción se puede revertir desde el desencadenador. Los errores graves pueden hacer que se revierta automáticamente la totalidad de una transacción. Si se ejecutan desencadenadores DDL desde un lote y se incluye explícitamente la instrucción ROLLBACK TRANSACTION, se cancelará todo el lote. Para obtener más información, vea Usar desencadenadores DML que incluyan COMMIT o ROLLBACK TRANSACTION.

[!NOTA]

N se puede revertir un evento ALTER DATABASE producido dentro del cuerpo de un desencadenador DDL.

Al igual que los desencadenadores DML, los DDL se pueden anidar. Para obtener más información, vea Usar desencadenadores anidados.

Al diseñar desencadenadores DDL, tenga en cuenta lo que los diferencia de los DML:

  • Los desencadenadores DDL sólo se ejecutan una vez completada una instrucción Transact-SQL. Los desencadenadores DDL no se pueden utilizar como desencadenadores INSTEAD OF.

  • Los desencadenadores DDL no crean las tablas inserted y deleted. La información acerca de un evento que activa un desencadenador DDL y las modificaciones posteriores provocadas por el mismo se capturan con la función EVENTDATA. Para obtener más información, vea Usar la función EVENTDATA.