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