Partilhar via


Gatilhos INSTEAD OF UPDATE

Os gatilhos INSTEAD OF UPDATE podem ser definidos em uma exibição ou tabela para substituir a ação padrão da instrução UPDATE. Geralmente, o gatilho INSTEAD OF UPDATE é definido em uma exibição para modificar os dados em uma ou mais tabelas base.

Instruções UPDATE com referência a exibições com gatilhos INSTEAD OF UPDATE devem fornecer valores para todas as colunas de exibição não nulas referenciadas na cláusula SET. Isso inclui colunas de exibição que referenciam colunas na tabela base para as quais não é possível especificar valores de entrada, como:

  • Colunas computadas na tabela base.

  • Colunas de identidade na tabela base para as quais IDENTITY INSERT está definido como OFF.

  • Colunas de tabela base com o tipo de dados timestamp.

Freqüentemente, quando uma instrução UPDATE que referencia uma tabela tenta definir um valor para colunas, de identidade ou de timestamp, é gerado um erro porque os valores dessas colunas devem ser determinados pelo SQL Server. Essas colunas devem ser incluídas na instrução UPDATE para atender ao requisito NOT NULL da coluna. Entretanto, se a instrução UPDATE referencia uma exibição com um gatilho INSTEAD OF UPDATE, a lógica definida no gatilho pode ignorar essas colunas e evitar o erro. Para isso, o gatilho INSTEAD OF UPDATE não deve tentar atualizar os valores para as colunas correspondentes da tabela base. Isso ocorre quando as colunas não são incluídas na cláusula SET da instrução UPDATE. Quando um registro é processado a partir da tabela inserida, as colunas computadas, de identidade ou de timestamp podem conter um valor fictício para atender ao requisito da coluna NOT NULL, mas o gatilho INSTEAD OF UPDATE ignora esses valores e os valores corretos são definidos pelo SQL Server.

Essa solução funciona porque o gatilho INSTEAD OF UPDATE não precisa processar os dados das colunas inseridas que não foram atualizados. Na tabela inserida passada para um gatilho INSTEAD OF UPDATE, as colunas especificadas na cláusula SET seguem as mesmas regras das colunas inseridas em um gatilho INSTEAD OF INSERT. Para colunas não especificadas na cláusula SET, a tabela inserida contém os valores que existiam antes da emissão da instrução UPDATE. O gatilho pode testar se uma coluna específica foi atualizada usando a cláusula IF UPDATE (column). Para obter mais informações, consulte Gatilhos INSTEAD OF INSERT.

Os gatilhos INSTEAD OF UPDATE devem usar valores fornecidos para colunas computadas, de identidade ou timestamp somente nos critérios de pesquisa da cláusula WHERE.

A lógica que o gatilho INSTEAD OF UPDATE de uma exibição deve utilizar para processar valores atualizados fornecidos para colunas padrão, computadas de identidades ou de timestamp é a mesma lógica aplicada a valores inseridos para tipos de colunas.

ObservaçãoObservação

Não é possível definir gatilho INSTEAD OF UPDATE em uma tabela com uma chave estrangeira definida utilizando a ação UPDATE.

Consulte também

Conceitos