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:
- 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.
- 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.
- 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
- Abra o SQL Server Management Studio (SSMS) e conecte-se à sua instância.
- 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).
- Clique com o botão direito na pasta Jobs (Trabalhos) e selecione New Job... (Novo Trabalho).
- Na aba General (Geral), defina o nome da sua rotina:
[MuCRM] Premiacao Ranking Semanal