MUCRM Oficial

Como Configurar Job de Premiação de Rankings no SQL Server

Guia passo a passo para criar uma Job no SQL Server Agent que premia automaticamente o Top 3 do ranking de resets usando variáveis DECLARE e atualiza a MEMB_INFO.

MUCRM Oficial Serviços e Criação SQL Server Job Resetar Ranking Premiação MuOnline
há 1 hora

Como Configurar Job de Premiação de Rankings no SQL Server


A entrega manual de moedas e prêmios para os melhores colocados do ranking exige tempo e pode gerar atrasos. Utilizando o SQL Server Agent, você consegue agendar a execução de scripts em horários pontuais para identificar os vencedores e creditar as moedas diretamente na tabela de contas.


Neste tutorial, você vai aprender a estruturar uma Job no SQL Server usando variáveis (DECLARE) para premiar automaticamente os 3 primeiros colocados do ranking e entender a importância do comando IF para a segurança do banco.

1. O Script de Premiação do Top 3

O código utiliza variáveis locais para capturar o Login (AccountID) e o Nome (Name) dos três primeiros colocados do ranking, creditando os valores correspondentes de moedas na tabela MEMB_INFO.

-- O comando USE serve para selecionar o Banco de Dados (Database) que você quer utilizar
USE MuOnline;
GO

-- 1. Declaração das variáveis para armazenar o Top 3
DECLARE @AccountID1 VARCHAR(10), @Name1 VARCHAR(10);
DECLARE @AccountID2 VARCHAR(10), @Name2 VARCHAR(10);
DECLARE @AccountID3 VARCHAR(10), @Name3 VARCHAR(10);

-- 2. Busca o 1º Lugar (Maior número de resets na semana)
SELECT TOP 1 
    @AccountID1 = AccountID, 
    @Name1 = Name 
FROM Character 
ORDER BY resetsWeek DESC, Name DESC;

-- 3. Busca o 2º Lugar (Diferente do 1º colocado)
SELECT TOP 1 
    @AccountID2 = AccountID, 
    @Name2 = Name 
FROM Character 
WHERE Name <> @Name1 
ORDER BY resetsWeek DESC, Name DESC;

-- 4. Busca o 3º Lugar (Diferente do 1º e 2º colocados)
SELECT TOP 1 
    @AccountID3 = AccountID, 
    @Name3 = Name 
FROM Character 
WHERE Name NOT IN (@Name1, @Name2) 
ORDER BY resetsWeek DESC, Name DESC;

-- 5. Entrega da premiação em Gold na tabela de contas (MEMB_INFO)
IF (@AccountID1 IS NOT NULL)
    UPDATE MEMB_INFO SET gold = gold + 150 
    WHERE memb___id = @AccountID1;

IF (@AccountID2 IS NOT NULL)
    UPDATE MEMB_INFO SET gold = gold + 100 
    WHERE memb___id = @AccountID2;

IF (@AccountID3 IS NOT NULL)
    UPDATE MEMB_INFO SET gold = gold + 50  
    WHERE memb___id = @AccountID3;
GO

2. Por que o comando IF (@AccountID IS NOT NULL) é obrigatório?

O uso da cláusula de validação IF (@AccountID IS NOT NULL) é uma trava de segurança essencial por três motivos:

  1. Servidor Novo ou Poucos Jogadores Ativos: Se na virada da semana apenas 1 ou 2 personagens pontuaram no ranking, as variáveis @AccountID2 ou @AccountID3 ficarão vazias (NULL). Sem o IF, o comando tentaria executar uma query desnecessária com valor nulo.
  2. Prevenção de Falhas na Execução da Job: Se o SQL tentar processar uma instrução inconsistente, a Job pode retornar erro (Failed) no histórico do Agent, interrompendo etapas seguintes ou gerando alertas falsos.
  3. Segurança de Dados: O IF garante que o comando UPDATE só será disparado quando houver de fato uma conta válida encontrada no ranking, evitando operações em branco na tabela MEMB_INFO.
3. Criando a Job no SQL Server Agent

  1. Abra o SQL Server Management Studio (SSMS) e conecte-se à sua instância.
  2. No menu lateral Pesquisador de Objetos (Object Explorer), localize a pasta SQL Server Agent.
    • Verifique se o ícone do serviço está com a seta verde (em execução).
  3. Clique com o botão direito na pasta Jobs (Trabalhos) e selecione New Job... (Novo Trabalho).
  4. Na aba General (Geral), defina o nome da sua rotina:
  5. [MuCRM] Premiacao Ranking Semanal

Comentários (0)

Seja o primeiro a comentar.

Destaques da semana!

Servidores e empresas em evidência