Compreendendo gatilhos DDL versus DML
Gatilhos DDL e DML são usados com finalidades diferentes.
Gatilhos DML operam em instruções INSERT, UPDATE e DELETE e ajudam a impor regras de negócio e integridade de dados estendida, quando os dados são modificados em tabelas ou exibições.
Gatilhos DDL operam em instruções CREATE, ALTER, DROP e outras instruções DDL e procedimentos armazenados que executam operações similares a DDL. São usados para executar tarefas administrativas e impor regras de negócio que afetam bancos de dados. Aplicam-se a todos os comandos de um mesmo tipo em todo o banco de dados ou servidor.
Disparadores DML e DDL são criados, modificados e descartados por meio de sintaxe Transact-SQL similar, além de compartilharem comportamento semelhante.
Como os gatilhos DML, os disparadores DDL podem executar código gerenciado na forma de pacotes em assembly criado no Microsoft.NET Framework e carregado no SQL Server. Para obter mais informações, consulte Programando gatilhos CLR.
Como os gatilhos DML, mais de um disparador DDL pode ser criado na mesma instrução Transact-SQL. Além disso, o disparador DDL e a instrução que o aciona são executados na mesma transação. Essa transação pode ser revertida desde dentro do gatilho. Erros sérios podem fazer com que uma transação inteira seja automaticamente revertida. Gatilhos DDL executados a partir de um lote e incluídos explicitamente na instrução ROLLBACK TRANSACTION farão com que o lote inteiro seja cancelado. Para obter mais informações, consulte Usando gatilhos DML que incluem COMMIT ou ROLLBACK TRANSACTION.
Observação |
---|
Um evento ALTER DATABASE ocorrido dentro do corpo de um disparador DDL não pode ser revertido. |
Como os gatilhos DML, os disparadores DDL podem ser aninhados. Para obter mais informações, consulte Usando gatilhos aninhados.
Ao projetar disparadores DDL, considere suas diferenças em relação aos gatilhos DML, a saber:
Gatilhos DDL são executados apenas depois que uma instrução Transact-SQL é concluída. Gatilhos DDL não podem ser usados como gatilhos INSTEAD OF.
Gatilhos DDL não criam as tabelas inserted e deleted. As informações sobre um evento que aciona um disparador DDL e as alterações subseqüentes causadas pelo gatilho são capturadas por meio da função EVENTDATA. Para obter mais informações, consulte Usando a função EVENTDATA.