Compartilhar via


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çãoObservaçã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.

Consulte também

Conceitos