none
Como calcular média entre dois campos num Trigger? RRS feed

  • Pergunta

  • Olá,

    Estou criando tentando criar um trigger para pegar dois campos, encontrar a média e jogá-la num terceiro campo. Apesar de conseguir encontrar a média, quando tento inseri-la o único resultado que consigo é nulo. Vou deixar aqui o trigger:

    create trigger adcMedia 
    on Notas
    after insert, update
    as begin
    	declare
    		@nt1		float,
    		@nt2		float,
    		@media		float,
    		@cod_aluno	varchar(5),
    		@cod_discp	varchar(5)
    
    	select	@cod_aluno = cod_aluno, @cod_discp = cod_discp, 
    			@nt1 = nota1, @nt2 = nota2
    
    	from inserted
    
    	if (@nt1 != null or @nt2 != null)
    	begin
    		set @media = (@nt1 + @nt2)/2)
    		update Notas set
    		media = @media
    		where cod_aluno = @cod_aluno and cod_discp = @cod_discp
    	end
    end
    Toda ajuda é bem vinda!

    Obrigada.



    • Editado Artemilis quarta-feira, 26 de novembro de 2014 12:26
    quarta-feira, 26 de novembro de 2014 12:18

Respostas

Todas as Respostas

  • Deleted
    • Marcado como Resposta Artemilis quarta-feira, 26 de novembro de 2014 12:39
    quarta-feira, 26 de novembro de 2014 12:23
  • A variável @media continua retornando como nula. :(
    quarta-feira, 26 de novembro de 2014 12:28
  • Deleted
    • Marcado como Resposta Artemilis quarta-feira, 26 de novembro de 2014 12:39
    quarta-feira, 26 de novembro de 2014 12:29
  • Deleted
    • Marcado como Resposta Artemilis quarta-feira, 26 de novembro de 2014 12:39
    quarta-feira, 26 de novembro de 2014 12:31
  • Acho que deveria ser algo relacionado ao 2.0. Agora está funcionando, muitíssimo obrigada!
    quarta-feira, 26 de novembro de 2014 12:39
  • Deleted
    • Marcado como Resposta Artemilis quarta-feira, 26 de novembro de 2014 13:02
    quarta-feira, 26 de novembro de 2014 12:53
  • Artemilis,

    Se estas colunas estão na mesma tabela onde é disparada a trigger, a melhor solução é criar uma coluna computada.

    Veja como criar uma coluna computada para sua tabela:

    ALTER TABLE dbo.TB_SuaTabela ADD CD_MEDIA AS ((Nota1 + Nota2)  /2);
    GO


    Para maiores informações sobre colunas computadas veja:

    http://technet.microsoft.com/pt-br/library/ms188300(v=sql.110).aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Marcado como Resposta Artemilis quarta-feira, 26 de novembro de 2014 13:02
    quarta-feira, 26 de novembro de 2014 12:54
    Moderador
  • Artemilis, eis uma sugestão para o procedimento trigger:

    -- código 1
    create trigger adcMedia 
    on Notas
    after insert, update
    as begin
    
    UPDATE N
      set media= (IsNull(I.nota1, 0) + IsNull(I.nota2, 0)) / 2.
      from Notas as N 
           inner join Inserted as I 
             on N.cod_aluno = I.cod_aluno and N.cod_discp = I.cod_discp
      where I.nota1 is not null or I.nota2 is not null;
    end;

    Obrigada por ter melhorado muito meu código, vou seguir sua sugestão que é bem mais limpa.
    quarta-feira, 26 de novembro de 2014 13:00
  • Artemilis,

    Se estas colunas estão na mesma tabela onde é disparada a trigger, a melhor solução é criar uma coluna computada.

    Veja como criar uma coluna computada para sua tabela:

    ALTER TABLE dbo.TB_SuaTabela ADD CD_MEDIA AS ((Nota1 + Nota2)  /2);
    GO

    É uma ótima solução, mas realmente tenho que fazer isso usando uma trigger.

    quarta-feira, 26 de novembro de 2014 13:02