Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Trigger de Insert


Thiago Cabral

Pergunta

Boa Noite

Pessoal, sou novo no fórum, e este é meu primeiro tópico, também sou novo na linguagem SQL(SQL Server 2000), espero que alguém possa me ajudar, o problema é o seguinte:

Tenho uma tabela1 com 5 campos e uma outra tabela2 com 3 campos,

create table tabela1

(

cod_test int not null,

valor1_test decimal(8,2),

valor2_test decimal(8,2),

valor3_test decimal(8,2),

valor4_test decimal(8,2),

primary key(cod_test)

)GO

create table tabela2

(

cod_test2 int not null,

cod_test int not null,

valor_total decimal(8,2),

valor_total2 decimal(8,2),

primary key(cod_teste),

foreign key(cod_test) references tabela1

)GO

o dilema é: Preciso criar uma Trigger que, quando a tabela1 receber os regitros(INSERT), faça as somas (valor1_test + valor2_test), (valor3_test + valor4_test), e insira na tabela2 nos campos (valor_total, valor_total2), passei o dia com a Trigger aqui, mas não funcionou.

CREATE TRIGGER TG_INSERT_TABELA2

ON TESTE

AFTER INSERT

AS

BEGIN

DECLARE @V_VALOR_TOTAL1 DECIMAL(8,2)

DECLARE @V_VALOR_TOTAL2 DECIMAL(8,2)

BEGIN

SET @V_VALOR_TOTAL1 = (SELECT SUM(valor1_test + valor2_test) FROM tabela1)

SET @V_VALOR_TOTAL2 = (SELECT SUM(valor3_test + valor4_test) FROM tabela1)

END

BEGIN

INSERT INTO tabela2

VALUES (1,1,@V_VALOR_TOTAL1,@V_VALOR_TOTAL2)

WHERE valor_total = @V_VALOR_TOTAL1

AND valor_total = @VALOR_TOTAL2

END

END

OBS-1: no campo Values da TRIGGER, como é um teste eu coloquei PK = 1 e FK = 1(referenciando ao registro já inserido)

OBS-2: o Tabela Oríginal é um pouco grande pra ser colocada, porém segue a mesma lógica, contém cerca 70 campos, 14 deles serão somados na TRIGGER, e colocados em dois campos da tabela secundária.

Espero que me ajudem!

Obrigado a todos!

Thiago Ericson Cabral

thiagoericson@yahoo.com

suporte técnico - ValeCard

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Boa noite, madrugada!

Depois de alguns dias aqui, resolvi o problema que por sinal era bem simples, somente um erro de sintaxe, porém eu mudei o nome dos campos das tabelas, segue a baixo para quem necessitar, ou tiver interesse

Obs: está com um erro muito loco no campo COD_TESTE, ainda não consegui descifrar, porém a trigger que era o problema, realmente rodou!

Obrigado!

--cria table's--------------

-----------------------------

CREATE TABLE TB_TESTE

(

COD_TESTE INT NOT NULL IDENTITY(1,1),

VALOR_TESTE1 DECIMAL(8,2),

VALOR_TESTE2 DECIMAL(8,2),

VALOR_TESTE3 DECIMAL(8,2),

VALOR_TESTE4 DECIMAL(8,2),

PRIMARY KEY(COD_TESTE)

)

CREATE TABLE TB_RECEBE_VALOR

(

COD_A_V INT NOT NULL IDENTITY(1,1),

COD_TESTE INT NOT NULL,

VALOR_TOTAL_TESTE1 DECIMAL(8,2),

VALOR_TOTAL_TESTE2 DECIMAL(8,2),

PRIMARY KEY(COD_A_V),

FOREIGN KEY(COD_TESTE)REFERENCES TB_TESTE

)

--cria a trigger-----------------------------------------

----------------------------------------------------------

CREATE TRIGGER TG_INSERT_TB_RECEBE_VALOR

ON TB_TESTE

AFTER INSERT

AS

BEGIN

DECLARE @V_VALOR_TOTAL1 DECIMAL(8,2)

DECLARE @V_VALOR_TOTAL2 DECIMAL(8,2)

BEGIN

SET @V_VALOR_TOTAL1 = (SELECT SUM(VALOR_TESTE1 + VALOR_TESTE2) FROM TESTE)

SET @V_VALOR_TOTAL2 = (SELECT SUM(VALOR_TESTE3 + VALOR_TESTE4) FROM TESTE)

INSERT INTO TB_RECEBE_VALOR(VALOR_TOTAL_TESTE1, VALOR_TOTAL_TESTE2)

VALUES (@V_VALOR_TOTAL1, @V_VALOR_TOTAL2)

END

END

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...