E aí pessoal, blz.... Eu participo de outras listas de Delphi, e na lista DTDelphi eu vi essa dica, os créditos estão na própria Tigger. Como não manjo de Banco de Dados, deixo para vocês mestres analisarem e falarem se funciona, etc...
Só não consegui organizar porque não manjo... poderia alguém reenviar com a ordem correta, pois mistura comentários com o código, foi do jeito que estava no email (talvez porque recebo via texto e não via html). A mensagem completa do email: ___________________________________________________________ Bom dia! Consegui fazer uma rotina que há muito precisa, saber qual a coluna alterada, o valor anterior e o valor atual de forma automática em determinadas tabelas, segue uma trigger para sqlserver que pode ser adaptada a qualquer outro banco de dados, consegui e estou dispondo ai para todos: Para que funcione basta que informe o nomedatabela e a chave que será utilizada para busca da alteração posteriormente. -- Criada por Sérgio/PROINDDY/MA em 15 10 2008-- Podem distribuir a vontade essas linhas só não tirem os creditosCREATE TRIGGER [TG_AUDITORIA] ON [dbo].[FUNCIONARIOS] FOR UPDATEAS declare @coluna_nome varchar(60), @EXECUTA VARCHAR(1000), @NomeTabela char(30), @chave char(80) set @nomeTabela = 'FUNCIONARIOS' -- INFORME O NOME DA TABELAset @Chave = 'a.f_empresa+a.f_local+cast(a.f_codigo as varchar)' -- INFORME A CHAVE DE PROCURA --CONTEUDO DA TABELA ALTERAÇÃ0 -- SELECT TRAZ TODAS AS COLUNAS DA TABELADECLARE GC_ALTERACAO CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @nomeTabelaOPEN GC_ALTERACAO FETCH NEXT FROM GC_ALTERACAOINTO @COLUNA_NOME SELECT * INTO #INSERT2 FROM INSERTED SELECT * INTO #DELETED2 FROM DELETED -- LOOP PARA TODOS OS CAMPOS WHILE (@@FETCH_STATUS = 0) BEGIN --GRAVA ALTERAÇÃO QUE HOUVE NA COLUNA PESQUISADA EM TODOS OS REGISTROS set @EXECUTA = 'insert into alteracao(alt_tabela,alt_chave,alt_campo,alt_valor_de,alt_valor_para) '+ 'select ''' + @NomeTabela + ''','[EMAIL PROTECTED]','''[EMAIL PROTECTED]''',B.'[EMAIL PROTECTED]',A.'[EMAIL PROTECTED]' from #insert2 a, #deleted2 b where a.'[EMAIL PROTECTED]' <> b.'[EMAIL PROTECTED] exec(@executa) FETCH NEXT FROM GC_ALTERACAO INTO @COLUNA_NOME END CLOSE GC_ALTERACAODEALLOCATE GC_ALTERACAO -- ESTRUTURA DA TABELA DE ALTERAÇÃO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ALTERACAO]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[ALTERACAO]GOCREATE TABLE [dbo].[ALTERACAO] ( [ALT_CHAVE] [char] (80) COLLATE SQL_Latin1_General_CP1_CI_AI NULL , [ALT_CAMPO] [char] (50) COLLATE SQL_Latin1_General_CP1_CI_AI NULL , [ALT_VALOR_DE] [char] (80) COLLATE SQL_Latin1_General_CP1_CI_AI NULL , [ALT_VALOR_PARA] [char] (80) COLLATE SQL_Latin1_General_CP1_CI_AI NULL , [ALT_TABELA] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AI NULL ) ON [PRIMARY]GO _________________________________________ :)