Esse artigo faz parte da revista SQL Magazine edição 46. Clique aqui para ler todos os artigos desta edição

oft-com:office:office" />

SQL Server Triggers

Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela

 

Certamente você já ouviu falar muito sobre triggers. Mas o quê são triggers? Quando e como utilizá-las? A verdade é que triggers nada mais são que um tipo especial de stored procedure com a capacidade de poder ser vinculada a uma tabela ou view e que são disparadas (daí o nome triggers) em resposta a eventos de INSERT, UPDATE ou DELETE que ocorrem sobre uma tabela ou view a qual estão vinculadas.

Em versões mais antigas do SQL Server as triggers eram muito utilizadas para garantir a integridade referencial dos dados. No entanto, com as versões mais recentes como SQL Server 2000 e 2005, muitas destas tarefas passaram a ser melhor executadas pelas constraints e foreign keys. Diante disso, as triggers são hoje muito utilizadas para criar regras de auditoria, como inclusive já foi destacado em outros artigos.

O fato é que as triggers são verdadeiras ferramentas que quando bem utilizadas podem ajudar a implementar complexas regras de negócio, permitir a modificação de dados em múltiplas tabelas ou até executar rollback de transações inteiras. Neste artigo, será feita uma introdução aos tipos de triggers disponíveis no SQL Server e será demonstrado como utilizar um tipo especial de trigger chamada INSTEAD OF para criar triggers em views, permitindo controlar as atualizações em tabelas através das views. Alem disso, será apresentado também como podemos identificar ou auditar quais colunas de uma tabela estão sendo atualizadas em uma instrução de UPDATE, utilizando uma função especial chamada COLUMNS_UPDATE.

Tipos de Triggers

O ponto chave para uma correta utilização das triggers é conhecer seus tipos e principalmente entender o funcionamento e a diferença entre cada uma delas. O SQL Server oferece basicamente dois tipos de triggers, estas são chamadas AFTER e INSTEAD OF triggers.

Até a chegada do SQL Server 2000 as AFTER triggers eram o único tipo de trigger disponível no SQL Server. Estas são executadas após a ocorrência de um evento de INSERT, UPDATE ou DELETE podendo ser usadas para fazer rollback de uma modificação de dados e ainda ser chamada de forma recursiva até 32 níveis, ou seja, trigger1 que chama a trigger2 que chama a trigger3 e assim sucessivamente até atingir a trigger32. No entanto, uma das limitações das AFTER triggers está no fato de que elas não podem ser usadas em views, vinculadas a mais de uma tabela e também não podem ser utilizadas sobre colunas do tipo text, ntext ou image. Para que você possa entender mais claramente o funcionamento de uma AFTER trigger, vamos a um exemplo prático. O exemplo da Listagem 1 cria uma AFTER trigger sobre a tabela Authors do banco de dados Pubs.

 

Listagem 1. Exemplo de AFTER trigger.

1.     CREATE TRIGGER tr_after_update_authors ON Authors AFTER UPDATE

2.     AS

3.     IF UPDATE(city)

4.              BEGIN

5.                        RAISERROR ('A cidade não pode ser alterada!', 16, 1)

6.                        SELECT au_id,city FROM authors WHERE au_id= '238-95-7766'

7.                        ROLLBACK

8.              END

9.     GO

 

Com esta trigger, quando um evento de UPDATE for executado sobre a tabela Authors a trigger será disparada e verificará se a coluna city foi atualizada (linha 3). Em caso afirmativo, a trigger irá disparar uma mensagem dizendo que a alteração não pode ser realizada (linha 5), fará um SELECT sobre a tabela Author e irá desfazer o comando de UPDATE usando o ROLLBACK da linha 7.

O importante ao se trabalhar com AFTER triggers é saber que elas somente são disparadas após o evento de UPDATE, DELETE ou INSERT ter ocorrido, ou seja, após o valor ter sido alterado na tabela afetada. Isso pode ser facilmente verificado se você utilizar o script da Listagem 2 para disparar a trigger criada pelo script da Listagem 1.

...

Quer ler esse conteúdo completo? Tenha acesso completo