• Bem vindo à nossa comunidade - Quer se juntar ao resto dos nossos membros? Registre-se*Registros aprovados pela adminitração

contagem de pk e hero

CronusMakerchanel

MAPSMAKER,3DMaker,MuHelper
Moderador
Super Moderador
Atendendo a um pedido do @Mr.Junior, fiz essa trigger de contagem de ranking de PK e Hero, que conta os kills com mais precisão.
Existem scripts similares postados no fórum? Sim, mas esse é mais preciso.

Sem mais enrolação:

♦ Versão atual do Script:

- TRIGGER: 1.0.0


♦ ALTER TABLES



Código:

USE [MUOnline]
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [PkCount] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [PkCountDay] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [PkCountWeek] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [PkCountMonth] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [PkCountTotal] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [HeroCount] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [HeroCountDay] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [HeroCountWeek] [int] DEFAULT ((0)) NOT NULL
GO

ALTER TABLE [dbo].[Character]
ALTER COLUMN [HeroCountMonth] [int] DEFAULT ((0)) NOT NULL
GO




♦ TRIGGER - RankingHeroPK
 



Código:

/*
| @author - Renato Valer
| @version - 1.0.0
| @last update - 2016/04/30 - 11h53min
| @warning: Não me responsabilizo por uso incorreto e possíveis deadlocks. Use por sua conta e risco.
*/

USE MuOnline
GO

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'RankingHeroPK' AND type = 'TR')
DROP TRIGGER [RankingHeroPK]
GO

CREATE TRIGGER [dbo].[RankingHeroPK]
ON [dbo].[Character]
AFTER UPDATE AS
SET NOCOUNT ON

IF UPDATE(PkCount)
BEGIN SET NOCOUNT ON;

DECLARE @Name varchar(12);
DECLARE @PKOld int;
DECLARE @PkNew int;
DECLARE @DIF int;

SELECT @Name = Name FROM INSERTED;
SELECT @PKOld = PkCount FROM DELETED;
SELECT @PKNew = PkCount FROM INSERTED;

SET @DIF = @PKNew - @PKOld;

IF(@PkNew > 0)

UPDATE [Character] SET
PkCountDay = PkCountDay + @DIF,
PkCountWeek = PkCountWeek + @DIF,
PkCountMonth = PkCountMonth + @DIF,
PkCountTotal = PkCountTotal + @DIF
WHERE Name = @Name AND PkCount > 0;
ELSE BEGIN

UPDATE [Character] SET
HeroCountDay = HeroCountDay - @DIF,
HeroCountWeek = HeroCountWeek - @DIF,
HeroCountMonth = HeroCountMonth - @DIF,
HeroCount = HeroCount - @DIF
WHERE Name = @Name AND PkCount < 0;
END

SET NOCOUNT OFF
END



ATENÇÃO




Não me responsabilizo por uso incorreto.
Não me responsabilizo por eventuais deadlocks. Usem por conta e risco.

Agradecimentos a Mr.Junior pela colaboração.
Renato por liberar os corigos
[]'s
 
Topo Bottom