none
Ajuda Triggers RRS feed

  • Pergunta

  • Tenho um banco de dados de um jogo que armazenará, pontuações e nomes na tabela recordes, porem queria fazer uma espécie que só fique 10 jogadores com a maior pontuação, fiz duas trigger para substituir o nome e a pontuação mas acho que não estão certas.

    CREATE TRIGGER PONTUACAO ON Recordes FOR INSERT AS BEGIN DECLARE @pontuacao nchar(10), @nome nchar(10), @ID INT SET @ID = (SELECT ID FROM INSERTED) SET @pontuacao= (SELECT @pontuacao FROM INSERTED) UPDATE Recordes SET pontuacao = pontuacao + @pontuacao WHERE ID = @ID END

    CREATE TRIGGER NOME
    ON Recordes
    FOR INSERT
    
    AS
    
    BEGIN
    
        DECLARE
        @pontuacao    nchar(10),
        @nome        nchar(10),
        @ID          INT
    
        SET @ID = (SELECT ID FROM INSERTED)
        SET @nome = (SELECT nome FROM INSERTED)
    
        UPDATE Recordes SET nome = nome + @nome
        WHERE ID = @ID
    
    END
    
    GO

    Obrigado desde já.

     
    terça-feira, 28 de outubro de 2014 16:41

Respostas

  • Matheuskzt,

    Certamente as sua triggers não são o melhor caminho (pelo menos do modo que estão criados).

    Neste caso, não há necessidade de criar 2 triggers para "disparo" do INSERT na tabela "Recordes".

    Outro ponto que fiquei em dúvida é sobre o porque você concatena o "nome" e a "pontuação"? Não é para verificar e substituir o jogador, caso este novo obtenha maior pontuação que um dos 10 primeiros?

    Então, você precisa criar uma lógica para todo este "mecanismo". Só após você criar um princípio de lógica é que podemos indicar o que está certo ou errado.

    Por favor, indique mais informações para que possamos ajudar você à encontrar uma solução.

    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"

    quarta-feira, 29 de outubro de 2014 11:23
    Moderador

Todas as Respostas

  • Matheus,

    Faça um SELECT primeiro para descobrir quem são os TOP 10 e, com esse resultado, faça o UPDATE.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    terça-feira, 28 de outubro de 2014 16:49
  • Matheuskzt,

    Certamente as sua triggers não são o melhor caminho (pelo menos do modo que estão criados).

    Neste caso, não há necessidade de criar 2 triggers para "disparo" do INSERT na tabela "Recordes".

    Outro ponto que fiquei em dúvida é sobre o porque você concatena o "nome" e a "pontuação"? Não é para verificar e substituir o jogador, caso este novo obtenha maior pontuação que um dos 10 primeiros?

    Então, você precisa criar uma lógica para todo este "mecanismo". Só após você criar um princípio de lógica é que podemos indicar o que está certo ou errado.

    Por favor, indique mais informações para que possamos ajudar você à encontrar uma solução.

    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"

    quarta-feira, 29 de outubro de 2014 11:23
    Moderador