none
Dificuldade em desenvolver uma Trigger simples RRS feed

  • Pergunta

  • Trigger atualiza_valor_venda: Após a inclusão, alteração ou exclusão de um item de venda a trigger deve somar os valores totais de todos os itens da venda que ela pertence e atualizar o campo valortotal da tabela de venda.

    Esses são os campos da tabela:

    IDVENDA INT
    CLIENTE_VENDA INT
    DATA DATE
    HORA TIME
    VALORTOTAL NUMERIC(15,2)
    FUNCIONARIO_VENDA INT

    pesquise bastante sobre o assunto, porém não consigo desenvolver... é muito complicado?
    poderia me dar um auxílio?

    obrigado

    terça-feira, 8 de outubro de 2013 21:32

Respostas

  • Deleted
    • Marcado como Resposta Giovani Cr segunda-feira, 14 de outubro de 2013 19:19
    terça-feira, 8 de outubro de 2013 21:55
  • Deleted
    • Marcado como Resposta Giovani Cr segunda-feira, 14 de outubro de 2013 19:19
    terça-feira, 8 de outubro de 2013 21:59
  • Luciano,

    Veja se este exemplo poderá ajudar:

    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(20),
       Saldo Int)
    Go
    
    Insert Into NovosProdutos Values('Produto -'+Convert(VarChar(3),@@Identity),0)
    Go 100
    
    Create Table Movimentacao
     (Codigo Int Identity(1,1),
       CodProduto Int,
       TipoMovimentacao Char(1),
       Valor Int)
    Go
    
    Create Trigger T_MovimentacaoSaldo
    On Movimentacao
    After Insert, Update
    As
     Declare @TipoMovimentacao Char(1)
    
     Select @TipoMovimentacao=TipoMovimentacao from Inserted
    
     If @TipoMovimentacao = 'E'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo + I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto  
      End
    
      If @TipoMovimentacao = 'S'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo - I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto
      End
    
    --Fazendo lançamentos de entrada
    Insert Into Movimentacao Values(2,'E',10)
    Insert Into Movimentacao Values(2,'E',15)
    Insert Into Movimentacao Values(2,'E',5)
    Insert Into Movimentacao Values(2,'E',22)
    Insert Into Movimentacao Values(2,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(2,'S',8)
    Insert Into Movimentacao Values(2,'S',5)
    Insert Into Movimentacao Values(2,'S',3)
    Insert Into Movimentacao Values(2,'S',2)
    Insert Into Movimentacao Values(2,'S',1)
    
    Insert Into Movimentacao Values(8,'E',10)
    Insert Into Movimentacao Values(9,'E',15)
    Insert Into Movimentacao Values(1,'E',5)
    Insert Into Movimentacao Values(3,'E',22)
    Insert Into Movimentacao Values(22,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(8,'S',8)
    Insert Into Movimentacao Values(9,'S',5)
    Insert Into Movimentacao Values(1,'S',3)
    Insert Into Movimentacao Values(3,'S',2)
    Insert Into Movimentacao Values(22,'S',1)
    
    Select * from NovosProdutos


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr segunda-feira, 14 de outubro de 2013 19:19
    sexta-feira, 11 de outubro de 2013 18:13

Todas as Respostas

  • Deleted
    • Marcado como Resposta Giovani Cr segunda-feira, 14 de outubro de 2013 19:19
    terça-feira, 8 de outubro de 2013 21:55
  • Deleted
    • Marcado como Resposta Giovani Cr segunda-feira, 14 de outubro de 2013 19:19
    terça-feira, 8 de outubro de 2013 21:59
  • Luciano,

    Veja se este exemplo poderá ajudar:

    Create Table NovosProdutos
     (Codigo Int Identity(1,1),
       Descricao VarChar(20),
       Saldo Int)
    Go
    
    Insert Into NovosProdutos Values('Produto -'+Convert(VarChar(3),@@Identity),0)
    Go 100
    
    Create Table Movimentacao
     (Codigo Int Identity(1,1),
       CodProduto Int,
       TipoMovimentacao Char(1),
       Valor Int)
    Go
    
    Create Trigger T_MovimentacaoSaldo
    On Movimentacao
    After Insert, Update
    As
     Declare @TipoMovimentacao Char(1)
    
     Select @TipoMovimentacao=TipoMovimentacao from Inserted
    
     If @TipoMovimentacao = 'E'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo + I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto  
      End
    
      If @TipoMovimentacao = 'S'
      Begin
       Update NovosProdutos
       Set Saldo = Saldo - I.Valor
       from NovosProdutos NP Inner Join Inserted I
                                          On NP.Codigo = I.CodProduto
      End
    
    --Fazendo lançamentos de entrada
    Insert Into Movimentacao Values(2,'E',10)
    Insert Into Movimentacao Values(2,'E',15)
    Insert Into Movimentacao Values(2,'E',5)
    Insert Into Movimentacao Values(2,'E',22)
    Insert Into Movimentacao Values(2,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(2,'S',8)
    Insert Into Movimentacao Values(2,'S',5)
    Insert Into Movimentacao Values(2,'S',3)
    Insert Into Movimentacao Values(2,'S',2)
    Insert Into Movimentacao Values(2,'S',1)
    
    Insert Into Movimentacao Values(8,'E',10)
    Insert Into Movimentacao Values(9,'E',15)
    Insert Into Movimentacao Values(1,'E',5)
    Insert Into Movimentacao Values(3,'E',22)
    Insert Into Movimentacao Values(22,'E',10)
    
    --Fazendo lançamentos de saída
    Insert Into Movimentacao Values(8,'S',8)
    Insert Into Movimentacao Values(9,'S',5)
    Insert Into Movimentacao Values(1,'S',3)
    Insert Into Movimentacao Values(3,'S',2)
    Insert Into Movimentacao Values(22,'S',1)
    
    Select * from NovosProdutos


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr segunda-feira, 14 de outubro de 2013 19:19
    sexta-feira, 11 de outubro de 2013 18:13