Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Talles Santana

trigger redundante

Recommended Posts

Boa tarde, tenho uma tabela chamada 'arquivo' e com a mudança da versão do sistema a coluna "data_criacao" do tipo varchar que corresponde a data que o arquivo foi inserido no sistema. Esta é da versão antiga(5). Na nova versão do sistema(versão 6) esta coluna será substituída pela coluna "data_arquivo" do tipo datetime.

 

O problema: Os sistemas(5 e 6) serão totalmente compatíveis, de modo que durante a migração haverão usuários usando o sistema nas duas versões. O sistema antigo só usa a coluna "data_criacao" e o novo só usa a coluna "data_arquivo".

 

Criei um trigger para que:

a) um usuário, usando a versão 6, ao inserir um arquivo a coluna "data_criação"(v5) seja preenchida com o valor da coluna data_arquivo.

b ) um usuário, usando a versão 5, ao inserir um arquivo a coluna "data_arquivo"(v6) seja preenchida com o valor da coluna data_criação.

 

 

Segue o código abaixo:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[PREENCHE_DATA_ARQUIVO] on [dbo].[ARQUIVO]
FOR INSERT, UPDATE
AS
--bloco do item a)
BEGIN
IF UPDATE(DATA_CRIACAO)
BEGIN
DECLARE @cod_arquivo NUMERIC(18,0)
SELECT @cod_arquivo=cod_arquivo FROM INSERTED
UPDATE ARQUIVO SET DATA_ARQUIVO = 
(SELECT CONVERT(DATETIME, (SELECT DATA_CRIACAO FROM ARQUIVO WHERE cod_arquivo = @cod_arquivo),103)) WHERE
COD_ARQUIVO=@COD_ARQUIVO
END
-- fim bloco item a)

-- bloco do item B)
IF UPDATE(DATA_ARQUIVO)
BEGIN
DECLARE @cod_arquivo2 NUMERIC(18,0)
SELECT @cod_arquivo2=cod_arquivo FROM INSERTED
UPDATE ARQUIVO SET DATA_CRIACAO= (SELECT CONVERT(VARCHAR,(SELECT DATA_ARQUIVO FROM ARQUIVO WHERE cod_arquivo = 
@cod_arquivo2),103))+' '+ (SELECT CONVERT(VARCHAR,(SELECT DATA_ARQUIVO FROM ARQUIVO WHERE cod_arquivo = 
@cod_arquivo2),108)) WHERE COD_ARQUIVO=@cod_arquivo2
END
END

cod_arquivo é a PK da tabela.

 

Se eu fizer um insert na "data_criação" como:

insert into arquivo(cod_arquivo, data_criacao) values (35,'26/01/2010 13:35:00')

 

Funciona perfeitamente embora a linha "(1 row(s) affected)" apareça 3 vezes.(o trigger é chamada 2 vezes? o_o)

 

se eu fizer um insert em data_arquivo, como:

declare @data datetime
set @data = getdate()
insert into arquivo(cod_arquivo, data_arquivo) values (37, @data)

as duas colunas ficam "NULL".

 

Eu sei que o Trigger em si está correto, pois testei cada bloco(A e B ) sozinho. Mas quando os dois blocos estão no trigger ocorre esse problema de ficar nulo.

 

Já tentei colocar em triggers separados mas também dá erro.

 

 

Grato desde já,

Talles Santana

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tive um problema parecido, mas eu fazia replicação de campos de tabelas diferentes, mas acho que a solução deve funcionar pra você tambem.

 

você já tentou desativar as triggers temporariamente dessa tabela?

 

logo no inicio da sua tigger adicione a linha

 

ALTER TABLE [dbo].[ARQUIVO] disable trigger all

 

(ou use o nome da trigger ao inves de all)

 

ao final da trigger reative as triggers usando a linha

ALTER TABLE [dbo].[ARQUIVO] disable trigger all

 

isso vai impedir que ela seja chamada de forma redundante.

 

tente e me fala se deu certo, pois com uma tabela só eu nunca usei

 

 

abraço

 

Lucas

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.