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
Los desencadenadores DDL se inician en respuesta a varios eventos de lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones Transact-SQL que comienzan con las palabras clave CREATE, , ALTERDROPGRANT, , DENY, REVOKEo .UPDATE STATISTICS Algunos procedimientos almacenados del sistema que ejecutan operaciones de tipo DDL también pueden activar desencadenadores DDL.
Use desencadenadores DDL cuando desee realizar las tareas siguientes:
- Impedir determinados cambios en el esquema de la base de datos.
- Que ocurra algo en la base de datos como respuesta a un cambio realizado en el esquema de la base de datos.
- Registrar cambios o eventos en el esquema de la base de datos.
Importante
Pruebe los desencadenadores DDL para determinar su respuesta a los procedimientos almacenados del sistema que se ejecutan. Por ejemplo, la instrucción CREATE TYPE y el procedimiento almacenado sp_addtype disparan un desencadenador DDL que se crea a partir de un evento CREATE_TYPE.
Tipos de desencadenador DDL
Transact-SQL disparador
Un tipo especial de procedimiento almacenado de Transact-SQL que ejecuta una o más instrucciones Transact-SQL como respuesta a un evento con ámbito de servidor o de base de datos. Por ejemplo, un desencadenador DDL podría desencadenarse si se ejecuta una instrucción como ALTER SERVER CONFIGURATION o si se elimina una tabla mediante DROP TABLE.
Desencadenador CLR
En lugar de ejecutar un procedimiento almacenado de Transact-SQL, un desencadenador de Common Language Runtime (CLR) ejecuta uno o varios métodos escritos en código administrado que son miembros de un ensamblado creado en .NET Framework y cargados en SQL Server.
Los desencadenadores DDL solo se activan cuando se ejecutan las instrucciones DDL que los desencadenan. Los desencadenadores DDL no se pueden usar como desencadenadores INSTEAD OF. Los desencadenadores DDL no se activan como respuesta a eventos que afectan a procedimientos almacenados y tablas temporales, ya sean locales o globales.
Los desencadenadores DDL no crean las tablas especiales inserted y deleted.
La información sobre un evento que desencadena un desencadenador DDL y los cambios posteriores causados por el desencadenador se capturan mediante la EVENTDATA función .
Por cada evento DDL se crean varios desencadenadores.
A diferencia de los desencadenadores del lenguaje de manipulación de datos (DML), los desencadenadores DDL no tienen como ámbito esquemas. Por lo tanto, las funciones como OBJECT_ID, OBJECT_NAME, OBJECTPROPERTYy OBJECTPROPERTYEX no se pueden usar para consultar metadatos sobre desencadenadores DDL. Utilice en su lugar las vistas de catálogo.
Los desencadenadores DDL con ámbito en el servidor aparecen en el Explorador de objetos de SQL Server Management Studio, en la carpeta Desencadenadores . Dicha carpeta se encuentra en la carpeta Server Objects . Los desencadenadores DDL de ámbito de base de datos aparecen en la carpeta Desencadenadores de bases de datos . Esta carpeta se encuentra en la carpeta Programación de la base de datos correspondiente.
Importante
El código malintencionado de los desencadenadores se puede ejecutar con privilegios concentrados. Para obtener más información sobre cómo ayudar a reducir esta amenaza, consulte Administración de la seguridad del desencadenador.
Ámbito de desencadenadores DDL
Los desencadenadores DDL pueden activarse en respuesta a un evento de Transact-SQL procesado en la base de datos actual o en el servidor actual. El ámbito del desencadenador depende del evento. Por ejemplo, un desencadenador DDL creado para activarse en respuesta a un CREATE_TABLE evento puede hacerlo siempre que se produzca un CREATE_TABLE evento en la base de datos o en la instancia del servidor. Un desencadenador DDL creado para activarse en respuesta a un CREATE_LOGIN evento solo puede hacerlo cuando se produce un CREATE_LOGIN evento en la instancia del servidor.
En el ejemplo siguiente, el desencadenador DDL safety se activa cada vez que se produce un evento DROP_TABLE o ALTER_TABLE en la base de datos.
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS PRINT 'You must disable trigger "safety" to drop or alter tables!';
ROLLBACK;
En el ejemplo siguiente, un desencadenador DDL imprime un mensaje si se produce algún evento CREATE_DATABASE en la instancia de servidor actual. En el ejemplo se usa la función EVENTDATA para recuperar el texto de la instrucción Transact-SQL correspondiente. Para obtener más información sobre cómo usar EVENTDATA con desencadenadores DDL, vea Usar la función EVENTDATA.
IF EXISTS (SELECT *
FROM sys.server_triggers
WHERE name = 'ddl_trig_database')
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
GO
CREATE TRIGGER ddl_trig_database
ON ALL SERVER
FOR CREATE_DATABASE
AS PRINT 'Database Created.';
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'nvarchar(max)');
GO
DROP TRIGGER ddl_trig_database
ON ALL SERVER;
Las listas que asignan las instrucciones Transact-SQL a los ámbitos que se pueden especificar para ellos están disponibles a través de los vínculos proporcionados en la sección Seleccionar una instrucción DDL determinada para activar un desencadenador DDL más adelante en este artículo.
Los desencadenadores DDL con ámbito de base de datos se almacenan como objetos en la base de datos en la que se crean. Los desencadenadores DDL se pueden crear en la master base de datos y comportarse igual que los creados en bases de datos diseñadas por el usuario. Puede obtener información sobre los desencadenadores DDL consultando la vista de catálogo sys.triggers. Puede consultar sys.triggers dentro del contexto de base de datos en el que se crean los desencadenadores o especificando el nombre de la base de datos como identificador, como master.sys.triggers.
Los desencadenadores DDL con ámbito de servidor se almacenan como objetos de la master base de datos. Pero puede obtenerse información sobre los desencadenadores DDL de ámbito de servidor si se consulta la vista de catálogo sys.server_triggers en cualquier contexto de base de datos.
Especificar una instrucción Transact-SQL o un grupo de instrucciones
Selección de una instrucción DDL determinada para activar un desencadenador DDL
Los desencadenadores DDL se pueden diseñar para activarse después de ejecutar una o varias instrucciones Transact-SQL determinadas. En el anterior ejemplo, el desencadenador safety se activa después de un evento DROP_TABLE o ALTER_TABLE . Para obtener una lista de las instrucciones Transact-SQL que pueden especificarse para activar un desencadenador DDL y el ámbito en el que el desencadenador se puede activar, vea Eventos DDL.
Selección de un grupo predefinido de instrucciones DDL para activar un desencadenador DDL
Los desencadenadores DDL se pueden activar tras la ejecución de un evento de Transact-SQL que pertenezca a una agrupación predefinida de eventos similares. Por ejemplo, si desea que se active un desencadenador DDL después de ejecutar cualquier instrucción CREATE TABLE, ALTER TABLE o DROP TABLE, puede especificar FOR DDL_TABLE_EVENTS en la declaración CREATE TRIGGER. Después de que se ejecute CREATE TRIGGER, los eventos que están cubiertos por un grupo de eventos se agregan a la vista del catálogo sys.trigger_events.
En SQL Server 2005 (9.x), si se crea un desencadenador en un grupo de eventos, sys.trigger_events no incluye información sobre el grupo de eventos, sys.trigger_events incluye información solo sobre los eventos individuales cubiertos por ese grupo.
sys.trigger_events conserva los metadatos sobre el grupo de eventos en el que se crea el desencadenador y también sobre los eventos individuales que cubre el grupo de eventos. Por lo tanto, los cambios en los eventos cubiertos por los grupos de eventos no se aplican a los desencadenadores DDL en versiones recientes de SQL Server que se crean en esos grupos de eventos en SQL Server 2005 (9.x).
Para obtener una lista de los grupos predefinidos de instrucciones DDL disponibles para los desencadenadores DDL, las instrucciones concretas que cubren los grupos de eventos y los ámbitos donde se pueden programar estos grupos de eventos, vea DDL Event Groups.
Tareas relacionadas
| Tarea | Artículo |
|---|---|
| Describe cómo crear, modificar, eliminar o deshabilitar desencadenadores DDL. | Implementar desencadenadores DDL |
| Describe cómo crear un desencadenador DDL de CLR. | Creación de desencadenadores CLR |
| Describe cómo devolver información acerca de los desencadenadores DDL. | Obtener información acerca de los desencadenadores DDL |
Describe cómo devolver información sobre un evento que desencadena un desencadenador DDL mediante la EVENTDATA función . |
Usar la función EVENTDATA |
| Describe cómo administrar la seguridad de los desencadenadores. | Administración de la seguridad del desencadenador |