Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O DDL dispara o fogo em resposta a uma variedade de eventos DDL (Linguagem de Definição de Dados). Esses eventos correspondem principalmente a instruções Transact-SQL que começam com as palavras-chave CREATE, ALTER, DROP, GRANT, DENY, REVOKE ou UPDATE STATISTICS. Determinados procedimentos armazenados do sistema que executam operações do tipo DDL também podem disparar gatilhos de DDL.
Use gatilhos DDL quando quiser fazer o seguinte:
Evite determinadas alterações no esquema do banco de dados.
Faça com que algo ocorra no banco de dados em resposta a uma alteração no esquema do banco de dados.
Registre alterações ou eventos no esquema do banco de dados.
Importante
Teste os gatilhos de DDL para determinar suas respostas aos procedimentos armazenados do sistema que estão sendo executados. Por exemplo, a instrução CREATE TYPE e o procedimento armazenado sp_addtype dispararão um gatilho DDL criado em um evento CREATE_TYPE.
Tipos de gatilhos DDL
Gatilho DDL Transact-SQL
Um tipo especial de Transact-SQL procedimento armazenado que executa uma ou mais instruções Transact-SQL em resposta a um evento com escopo de servidor ou com escopo de banco de dados. Por exemplo, um gatilho DDL poderá ser acionado se uma instrução como ALTER SERVER CONFIGURATION for executada ou se uma tabela for excluída usando DROP TABLE.
Gatilho DDL clr
Em vez de executar um procedimento armazenado Transact-SQL, um gatilho CLR executa um ou mais métodos escritos em código gerenciado que são membros de um assembly criado no .NET Framework e carregados no SQL Server.
O DDL dispara somente depois que as instruções DDL que as disparam são executadas. Os gatilhos DDL não podem ser usados como gatilhos INSTEAD OF. Os gatilhos DDL não são acionados em resposta a eventos que afetam tabelas temporárias locais ou globais e procedimentos armazenados.
Os gatilhos DDL não criam as tabelas especiais inserted e deleted.
As informações sobre um evento que dispara um gatilho DDL e as alterações subsequentes causadas pelo gatilho são capturadas usando a função EVENTDATA.
Vários gatilhos devem ser criados para cada evento DDL.
Ao contrário dos gatilhos DML, os gatilhos DDL não são limitados a esquemas. Portanto, funções como OBJECT_ID, OBJECT_NAME, OBJECTPROPERTY e OBJECTPROPERTYEX não podem ser usadas para consultar metadados sobre gatilhos DDL. Ao invés disso, use as exibições do catálogo.
Os gatilhos DDL com escopo de servidor aparecem no Explorador de Objetos do SQL Server Management Studio na pasta Triggers. Esta pasta está localizada na pasta Objetos do Servidor . Os gatilhos DDL com escopo de banco de dados aparecem na pasta Gatilhos de Banco de Dados . Essa pasta está localizada na pasta Programação do banco de dados correspondente.
Importante
Código malicioso dentro de gatilhos pode ser executado com privilégios elevados. Para obter mais informações sobre como ajudar a reduzir essa ameaça, consulte Gerenciar a Segurança do Gatilho.
Escopo do gatilho DDL
Os gatilhos DDL podem ser acionados em resposta a um evento Transact-SQL processado no banco de dados atual ou no servidor atual. O escopo do disparador depende do evento. Por exemplo, um gatilho DDL criado para disparar em resposta a um evento CREATE_TABLE pode fazer isso sempre que um evento CREATE_TABLE ocorrer no banco de dados ou na instância do servidor. Um gatilho DDL criado para disparar em resposta a um evento de CREATE_LOGIN só pode fazer isso quando um evento de CREATE_LOGIN ocorre na instância do servidor.
No exemplo a seguir, o gatilho DDL safety será acionado sempre que ocorrer um evento DROP_TABLE ou ALTER_TABLE no banco de dados.
CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK;
No exemplo a seguir, um gatilho DDL imprimirá uma mensagem se algum evento CREATE_DATABASE ocorrer na instância atual do servidor. O exemplo usa a EVENTDATA função para recuperar o texto da instrução Transact-SQL correspondente. Para obter mais informações sobre como usar EVENTDATA com gatilhos DDL, consulte Usar a função 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
As listas que mapeiam as instruções Transact-SQL para os escopos que podem ser especificados para eles estão disponíveis por meio dos links fornecidos na seção "Selecionando uma instrução DDL específica para disparar um gatilho DDL", mais adiante neste tópico.
Os gatilhos DDL com escopo de banco de dados são armazenados como objetos no banco de dados no qual são criados. Os gatilhos DDL podem ser criados no banco de dados mestre e se comportar exatamente como aqueles criados em bancos de dados projetados pelo usuário. Você pode obter informações sobre gatilhos DDL consultando a exibição de catálogo sys.triggers . Você pode consultar sys.triggers no contexto do banco de dados no qual os gatilhos são criados ou especificando o nome do banco de dados como um identificador, como master.sys.triggers.
Os gatilhos DDL com escopo de servidor são armazenados como objetos no banco de dados master. No entanto, você pode obter informações sobre gatilhos DDL com escopo de servidor consultando a exibição de catálogo sys.server_triggers em qualquer contexto de banco de dados.
Especificando uma instrução do tipo Transact-SQL ou um grupo de instruções
Selecionando uma instrução DDL específica para disparar um gatilho DDL
Os gatilhos DDL podem ser projetados para serem disparados depois que uma ou mais instruções Transact-SQL específicas forem executadas. No exemplo anterior, o gatilho safety é acionado após qualquer evento DROP_TABLE ou ALTER_TABLE. Para obter listas das instruções Transact-SQL que podem ser especificadas para disparar um gatilho DDL e o escopo no qual o gatilho pode ser acionado, consulte Eventos DDL.
Selecionando um grupo predefinido de instruções DDL para acionar um gatilho DDL
Um gatilho DDL pode ser acionado após a execução de qualquer evento Transact-SQL que pertença a um agrupamento predefinido de eventos semelhantes. Por exemplo, se você quiser que um gatilho DDL seja acionado após a execução de qualquer instrução CREATE TABLE, ALTER TABLE ou DROP TABLE, você poderá especificar FOR DDL_TABLE_EVENTS na instrução CREATE TRIGGER. Depois que CREATE TRIGGER é executado, os eventos cobertos por um grupo de eventos são adicionados à visão de catálogo sys.trigger_events.
No SQL Server 2005, se um gatilho for criado em um grupo de eventos, sys.trigger_events não inclui informações sobre o grupo de eventos; sys.trigger_events incluirá informações apenas sobre os eventos individuais cobertos por esse grupo. No SQL Server 2008 e superior, sys.trigger_events persiste metadados sobre o grupo de eventos no qual os gatilhos são criados e também sobre os eventos individuais que o grupo de eventos aborda. Portanto, as alterações nos eventos cobertos por grupos de eventos no SQL Server 2008 e posteriores não se aplicam a gatilhos DDL criados nesses grupos de eventos no SQL Server 2005.
Para obter uma lista dos grupos predefinidos de instruções DDL que estão disponíveis para gatilhos DDL, as instruções específicas que os grupos de eventos abrangem e os escopos nos quais esses grupos de eventos podem ser programados, consulte Grupos de Eventos DDL.
Tarefas Relacionadas
| Tarefa | Tópico |
|---|---|
| Descreve como criar, modificar, excluir ou desabilitar gatilhos DDL. | Implementar gatilhos DDL |
| Descreve como criar um gatilho DDL CLR. | Criar gatilhos CLR |
| Descreve como retornar informações sobre gatilhos DDL. | Obter informações sobre disparadores DDL |
| Descreve como retornar informações sobre um evento que dispara um gatilho DDL usando a função EVENTDATA. | Usar a função EVENTDATA |
| Descreve como gerenciar a segurança do gatilho. | Gerenciar a segurança do gatilho |
Consulte Também
Gatilhos DML
Gatilhos de logon
CREATE TRIGGER (Transact-SQL)