- NTEXT, * 3 - IMAGE*/ SET NOCOUNT ON --Verifica se existe uma tabela com o nome PowerAuditoria, se nao existir criamos a tabela.if not exists (SELECT name FROM SYSOBJECTS WHERE type = 'U' AND name = 'PowerAuditoria')begin create table PowerAuditoria( Id int not null identity(1,1) primary key, Usuario varchar(10) not null, DataHora datetime not null, Tabela varchar(50) not null, AcaoExecutada char(1) not null, RegistroAnterior varchar(3500), RegistroAtual varchar(3500) )end Declare @idTabela int, @nameTabela varchar(20), @nameColuna varchar(50), @query varchar(8000), @tipoCampo varchar(100), @tamanhoCampo int, @auxdeclare varchar(8000), @auxStringTrigger varchar(8000), @queryInsertUpdate varchar(8000), @queryDelete varchar(8000), @colunaValorDE varchar(8000), @colunaValorIU varchar(8000) --- Inicializando variaveis set @queryInsertUpdate = 'SELECT ' set @queryDelete = 'SELECT ' set @auxDeclare = 'DECLARE ' set @colunaValorDE = '' set @colunaValorIU = '' --Declarando cursor para as tabelas de uma database DECLARE cTabela CURSOR FOR (Select id, name from sysobjects where xtype = 'u' and name <> 'PowerAuditoria')open cTabelaFETCH NEXT FROM cTabela Into @idTabela, @nameTabelaWHILE @@FETCH_STATUS = 0begin --Declarando cursor para as colunas de uma tabela selecionada no cursor Declare cColuna cursor for (Select sc.name, st.name, sc.length from syscolumns sc inner join systypes st on sc.xusertype = st.xusertype where sc.id = @idTabela) open cColuna Fetch next from cColuna into @nameColuna, @tipoCampo, @tamanhoCampo while @@fetch_status = 0 begin --- Inicio variavel if (@tipoCampo = 'int' or @tipoCampo = 'bit' or @tipoCampo = 'bigint' or @tipoCampo = 'money')--Nao aceita tamanho begin set @auxDeclare = @auxDeclare + '@' + @nameColuna + '_UI ' + @tipoCampo + ', @' + @nameColuna + '_DE ' + @tipoCampo set @colunaValorIU = @colunaValorIU + '' + @nameColuna + '=''+' + ('cast(@'+ @nameColuna + '_UI as varchar)') set @colunaValorDE = @colunaValorDE + '' + @nameColuna + '=''+' + ('cast(@'+ @nameColuna + '_DE as varchar)') end else if(@tipoCampo = 'dateTime' or @tipoCampo = 'smalldatetime')--Nao aceita tamanho begin set @auxDeclare = @auxDeclare + '@' + @nameColuna + '_UI ' + @tipoCampo + ', @' + @nameColuna + '_DE ' + @tipoCampo set @colunaValorIU = @colunaValorIU + ('') + @nameColuna + ('=''+') + ('convert(varchar,@'+ @nameColuna + '_UI,121)') set @colunaValorDE = @colunaValorDE + ('') + @nameColuna + ('=''+') + ('convert(varchar,@'+ @nameColuna + '_DE,121)') end else if(@tipoCampo = 'text' or @tipoCampo = 'ntext' or @tipoCampo = 'image')--Nao aceita os tipos citados begin print ('Os tipos text, ntext e image nao sao compativeis com a auditoria ate o momento.')--nao faz nada end else begin set @auxDeclare = @auxDeclare + '@' + @nameColuna + '_UI ' + @tipoCampo + '(' + cast(@tamanhoCampo as varchar(5)) +'), @' + @nameColuna + '_DE ' + @tipoCampo + '(' + cast(@tamanhoCampo as varchar(5)) +')' set @colunaValorIU = @colunaValorIU + '' + @nameColuna + '=''+' + ('@'+ @nameColuna + '_UI') set @colunaValorDE = @colunaValorDE + '' + @nameColuna + '=''+' + ('@'+ @nameColuna + '_DE') end --- Fim variavel --- Inicio query --- Insert if (len(@queryInsertUpdate) > 0 and @tipoCampo <> 'text' and @tipoCampo <> 'ntext' and @tipoCampo <> 'image' ) begin set @queryInsertUpdate = @queryInsertUpdate + '@' +@nameColuna +'_UI='+ @nameColuna end --- Delete if (len(@queryDelete) > 0 and @tipoCampo <> 'text' and @tipoCampo <> 'ntext' and @tipoCampo <> 'image') begin set @queryDelete = @queryDelete