Array
(
)

Trigger executar para todos os registros de um UPDATE

Dimmy
   - 24 jun 2006

Estou executando um update da seguinte forma:

update clientes set estado = ´SP´
where estado = ´sp´

Mas essa tabela contem um triggers que grava um log.
E eu qeria qe isso fosse registrado por registro. Mas só registra o ultimo registro alterado.

Ou seja só dispara a trigger uma unica vez no update que seria para ´n´ registro.

Imagino que deve conter alguma coisa para ser setada.

SE mais Obrigado pessoal
T+
Dimmy :roll:

Emerson
   - 29 jun 2006

você precisa trabalhar todos os registros na trigger. para isso, crie um cursor local. nesse cursor você deve trabalhar com a tabela inserted, que é uma tabela virtual (também local) do sql server pra trabalho com inserções e/ou atualizaçoes de dados.
seria algo assim:#Código

   declare cursor_atualizados cursor local for
   select lista_de_campos
   from inserted -- aqui é inserted mesmo.
                 -- ela é uma tabela especial do sql server

   -- abre o cursor
   open cursor_atualizados

   -- pega o primeiro registro
   fetch next from cursor_atualizados
   into lista_de_variáveis -- deve ser igual a lista de campos

   -- esse LOOP fará a manipulação de todos os registros
   -- que sofreram alteração. ele irá executar enquanto seja
   -- possível passar para um próximo registro do cursor
   while @@FETCH_STATUS = 0
   begin
      -- ***********************************
      -- aqui vc deve gerar o seu log,
      -- trabalhando sempre com as variáveis
      -- ***********************************

      -- pega o próximo registro
      fetch next from cursor_atualizados
      into lista_de_variáveis
   end

   -- fecha o cursor
   close cursor_atualizados