Diseñar desencadenadores DDL
Actualizado: 12 de diciembre de 2006
Antes de diseñar un desencadenador DDL, se requiere lo siguiente:
- Debe comprender el ámbito de los desencadenadores DDL.
- Debe determinar la instrucción Transact-SQL o el grupo de instrucciones que activan el desencadenador.
Nota de seguridad: |
---|
El código perjudicial de los desencadenadores se puede ejecutar con privilegios concentrados. Para obtener más información acerca de cómo reducir la gravedad de esta amenaza, vea Administrar la seguridad de los desencadenadores. |
Descripción del ámbito de los desencadenadores
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 como respuesta a un evento CREATE TABLE se activará siempre que se produzca un evento CREATE TABLE en la base de datos. Un desencadenador DDL creado para activarse como respuesta a un evento CREATE LOGIN se activará siempre que se produzca un evento CREATE LOGIN en el servidor.
En el ejemplo siguiente, el desencadenador DDL safety
se activará siempre que se produzca 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. Utilice la función EVENTDATA
para recuperar el texto de la instrucción Transact-SQL correspondiente. Para obtener más información acerca de cómo utilizar 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;
GO
Las listas que asignan las instrucciones Transact-SQL a los ámbitos que se pueden especificar para ellas están disponibles en los vínculos de la sección "Seleccionar una instrucción DDL concreta para activar un desencadenador DDL".
Los desencadenadores DDL de ámbito de base de datos se almacenan como objetos en la base de datos donde se crean. Estos desencadenadores se pueden crear en la base de datos master y actuar como los creados en bases de datos diseñadas por el usuario. Se puede obtener información sobre los desencadenadores DDL en la vista de catálogo sys.triggers desde el contexto de base de datos donde se crean o bien mediante la especificación del nombre de base de datos como un identificador (por ejemplo, master.sys.triggers).
Los desencadenadores DDL de ámbito de servidor se almacenan como objetos en la base de datos master. Sin embargo, se puede obtener información sobre los desencadenadores DDL de ámbito de servidor desde la vista de catálogo sys.server_triggers en cualquier contexto de base de datos.
Para obtener más información sobre cómo recuperar metadatos para desencadenadores DDL, vea Obtener información acerca de los desencadenadores DDL.
Los desencadenadores DDL no se activan como respuesta a eventos que afectan a procedimientos almacenados y tablas temporales, ya sean locales o globales.
Especificar una instrucción o grupo de instrucciones Transact-SQL
Los desencadenadores DDL se pueden crear para activarse como respuesta a los siguientes eventos:
- Una o varias instrucciones DDL determinadas
- Un grupo de instrucciones DDL predefinidas
Seleccionar una instrucción DDL concreta 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 ejemplo anterior, el desencadenador safety se activa después de un evento DROP TABLE o ALTER TABLE.
No todos los eventos DDL pueden utilizarse para activar desencadenadores DDL. Algunos eventos están diseñados únicamente para instrucciones asincrónicas no transaccionales. Por ejemplo, no se puede utilizar un evento ADD_ROLE_MEMBER para activar un desencadenador DDL. Para estos eventos debe utilizar notificaciones de eventos. Para obtener más información acerca de las notificaciones de eventos, vea Notificaciones de eventos (motor de base de datos).
En el tema Usar eventos de DDL con desencadenadores DDL se muestran las instrucciones Transact-SQL que se pueden especificar para activar un desencadenador DDL y el ámbito donde se pueden activar.
Seleccionar 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 activar un desencadenador DDL después de que se ejecute una instrucción CREATE TABLE, ALTER TABLE o DROP TABLE, puede especificar FOR DDL_TABLE_EVENTS en la instrucción CREATE TRIGGER. Después de ejecutar CREATE TRIGGER, los eventos incluidos en un grupo de eventos se agregan a la vista de catálogo sys.trigger_events.
En el tema Usar grupos de eventos con desencadenadores DDL se muestran los grupos predefinidos de instrucciones DDL disponibles para los desencadenadores DDL, las instrucciones concretas que incluyen y los ámbitos donde se pueden programar estos grupos de eventos.
Vea también
Conceptos
Usar la función EVENTDATA
Descripción de los desencadenadores DDL
Implementar desencadenadores DDL
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
12 de diciembre de 2006 |
|
17 de julio de 2006 |
|