Selamlar,
Umarım Yapamıyan Arkadaşlara Faydası Olmuştur.
Öncelikle Procedurelerden USER_KNIGHTS_RATING_UPDATE ve UPDATE_PERSONAL_RANK Bunları Siliyoruz...
Ardından USER_KNIGHTS_RANK ve USER_PERSONAL_RANK Tablosunu Design Table Yapıp Sonda Eğer Varsa tUpdateTime veya UpdateDate v.s. Column i Siliyoruz Yok ise Aşağıdan Devam.
SQL Query Analizeri Açıyorsunuz
Kod:
TRUNCATE TABLE USER_KNIGHTS_RANK
TRUNCATE TABLE USER_PERSONAL_RANK
UPDATE_PERSONAL_RANK Proceduresi
Kod:
CREATE PROCEDURE UPDATE_PERSONAL_RANK
AS
/*
Author : AKUMA
E-Mail :
akuma@knightonlineturkiye.web.tr*/
SET NOCOUNT ON
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[KUSER_RATING_MONTHLY]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[KUSER_RATING_MONTHLY]
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[EUSER_RATING_MONTHLY]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[EUSER_RATING_MONTHLY]
CREATE TABLE [dbo].[KUSER_RATING_MONTHLY] (
[nRank] [int] IDENTITY (1, 1) NOT NULL ,
[strUserID] [char] (21) NULL,
[strKnightsName] [char] (21) NULL ,
[nLoyaltyMonthly] [int] NULL ,
) ON [PRIMARY]
CREATE TABLE [dbo].[EUSER_RATING_MONTHLY] (
[nRank] [int] IDENTITY (1, 1) NOT NULL ,
[strUserID] [char] (21) NULL,
[strKnightsName] [char] (21) NULL ,
[nLoyaltyMonthly] [int] NULL ,
) ON [PRIMARY]
INSERT INTO KUSER_RATING_MONTHLY
SELECT TOP 100 USERDATA.strUserId, KNIGHTS.IDName, USERDATA.LoyaltyMonthly FROM USERDATA INNER JOIN KNIGHTS ON USERDATA.Knights = KNIGHTS.IDNum
WHERE (USERDATA.Nation = 1) AND (USERDATA.City <> 255 ) AND (Authority = 1)
ORDER BY USERDATA.LoyaltyMonthly DESC
INSERT INTO EUSER_RATING_MONTHLY
SELECT TOP 100 USERDATA.strUserId, KNIGHTS.IDName, USERDATA.LoyaltyMonthly FROM USERDATA INNER JOIN KNIGHTS ON USERDATA.Knights = KNIGHTS.IDNum
WHERE (USERDATA.Nation = 2) AND (USERDATA.City <> 255 ) AND (Authority = 1)
ORDER BY USERDATA.LoyaltyMonthly DESC
CREATE INDEX [IX_RATING_RANK] ON [dbo].[KUSER_RATING_MONTHLY]([nRank]) ON [PRIMARY]
CREATE INDEX [IX_RATING_RANK] ON [dbo].[EUSER_RATING_MONTHLY]([nRank]) ON [PRIMARY]
DECLARE @CheckUserPersonalRankTable tinyint
SELECT @CheckUserPersonalRankTable = Count(*) FROM USER_PERSONAL_RANK
IF @CheckUserPersonalRankTable < 100
BEGIN
DECLARE @RankName varchar(30)
DECLARE @I int
SET @I = 1
WHILE @I < 101
BEGIN
IF @I = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @I > 1 AND @I <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @I > 4 AND @I <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @I > 9 AND @I <= 10
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @I > 25 AND @I <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
IF @I > 50 AND @I <= 100
BEGIN
SET @RankName = 'Training Knight'
END
INSERT INTO USER_PERSONAL_RANK VALUES (@I,@RankName,0,NULL,0,1000000,0,NULL,NULL,1000000,1000000,GETDATE())
SET @I = @I + 1
END
END
DECLARE @strCharID char(21)
DECLARE @strKnightsID char(21)
DECLARE @nIndex smallint
DECLARE @nLoyaltyMonthly int
SET @strCharID = NULL
SET @strKnightsID = NULL
SET @nIndex = 0
SET @nLoyaltyMonthly = 0
DECLARE CRS_KARUS CURSOR FOR
SELECT nRank, strUserID, strKnightsName, nLoyaltyMonthly FROM KUSER_RATING_MONTHLY
OPEN CRS_KARUS
FETCH NEXT FROM CRS_KARUS
INTO @nIndex, @strCharID, @strKnightsID, @nLoyaltyMonthly
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_PERSONAL_RANK SET strKarusUserID = @strCharID, nKarusLoyaltyMonthly = @nLoyaltyMonthly WHERE nRank = @nIndex
FETCH NEXT FROM CRS_KARUS
INTO @nIndex, @strCharID, @strKnightsID, @nLoyaltyMonthly
END
CLOSE CRS_KARUS
DEALLOCATE CRS_KARUS
DECLARE CRS_HUMAN CURSOR FOR
SELECT nRank, strUserID, strKnightsName, nLoyaltyMonthly FROM EUSER_RATING_MONTHLY
OPEN CRS_HUMAN
FETCH NEXT FROM CRS_HUMAN
INTO @nIndex, @strCharID, @strKnightsID, @nLoyaltyMonthly
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_PERSONAL_RANK SET strElmoUserID = @strCharID, nElmoLoyaltyMonthly = @nLoyaltyMonthly WHERE nRank = @nIndex
FETCH NEXT FROM CRS_HUMAN
INTO @nIndex, @strCharID, @strKnightsID, @nLoyaltyMonthly
END
CLOSE CRS_HUMAN
DEALLOCATE CRS_HUMAN
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[KUSER_RATING_MONTHLY]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[KUSER_RATING_MONTHLY]
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[EUSER_RATING_MONTHLY]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[EUSER_RATING_MONTHLY]
USER_KNIGHTS_RATING_UPDATE Procedüresi
Kod:
CREATE PROCEDURE USER_KNIGHTS_RATING_UPDATE
AS
/*
Author : AKUMA
E-Mail :
akuma@knightonlineturkiye.web.tr*/
SET NOCOUNT ON
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[KUSER_RATING]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[KUSER_RATING]
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[EUSER_RATING]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[EUSER_RATING]
CREATE TABLE [dbo].[KUSER_RATING] (
[nRank] [int] IDENTITY (1, 1) NOT NULL ,
[strUserID] [char] (21) NULL,
[strKnightsName] [char] (21) NULL ,
[nLoyalty] [int] NULL ,
) ON [PRIMARY]
CREATE TABLE [dbo].[EUSER_RATING] (
[nRank] [int] IDENTITY (1, 1) NOT NULL ,
[strUserID] [char] (21) NULL,
[strKnightsName] [char] (21) NULL ,
[nLoyalty] [int] NULL ,
) ON [PRIMARY]
INSERT INTO KUSER_RATING
SELECT TOP 100 USERDATA.strUserId, KNIGHTS.IDName, USERDATA.Loyalty FROM USERDATA INNER JOIN KNIGHTS ON USERDATA.Knights = KNIGHTS.IDNum
WHERE (USERDATA.Nation = 1) AND (USERDATA.City <> 255 ) AND (Authority = 1)
ORDER BY USERDATA.Loyalty DESC
INSERT INTO EUSER_RATING
SELECT TOP 100 USERDATA.strUserId, KNIGHTS.IDName, USERDATA.Loyalty FROM USERDATA INNER JOIN KNIGHTS ON USERDATA.Knights = KNIGHTS.IDNum
WHERE (USERDATA.Nation = 2) AND (USERDATA.City <> 255 ) AND (Authority = 1)
ORDER BY USERDATA.Loyalty DESC
CREATE INDEX [IX_RATING_RANK] ON [dbo].[KUSER_RATING]([nRank]) ON [PRIMARY]
CREATE INDEX [IX_RATING_RANK] ON [dbo].[EUSER_RATING]([nRank]) ON [PRIMARY]
DECLARE @CheckUserKnightsRankTable tinyint
SELECT @CheckUserKnightsRankTable = Count(*) FROM USER_KNIGHTS_RANK
IF @CheckUserKnightsRankTable < 100
BEGIN
DECLARE @RankName varchar(30)
DECLARE @I int
SET @I = 1
WHILE @I < 101
BEGIN
IF @I = 1
BEGIN
SET @RankName = 'Gold Knight'
END
IF @I > 1 AND @I <= 4
BEGIN
SET @RankName = 'Silver Knight'
END
IF @I > 4 AND @I <= 9
BEGIN
SET @RankName = 'Mirage Knight'
END
IF @I > 9 AND @I <= 10
BEGIN
SET @RankName = 'Shadow Knight'
END
IF @I > 25 AND @I <= 50
BEGIN
SET @RankName = 'Mist Knight'
END
IF @I > 50 AND @I <= 100
BEGIN
SET @RankName = 'Training Knight'
END
INSERT INTO USER_KNIGHTS_RANK VALUES (@I,@RankName,NULL,NULL,0,NULL,NULL,0,1000000)
SET @I = @I + 1
END
END
DECLARE @strCharID char(21)
DECLARE @strKnightsID char(21)
DECLARE @nIndex smallint
DECLARE @nLoyalty int
SET @strCharID = NULL
SET @strKnightsID = NULL
SET @nIndex = 0
SET @nLoyalty = 0
DECLARE CRS_KARUS CURSOR FOR
SELECT nRank, strUserID, strKnightsName, nLoyalty FROM KUSER_RATING
OPEN CRS_KARUS
FETCH NEXT FROM CRS_KARUS
INTO @nIndex, @strCharID, @strKnightsID, @nLoyalty
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_KNIGHTS_RANK SET strKarusUserID = @strCharID, strKarusKnightsName = @strKnightsID, nKarusLoyalty = @nLoyalty WHERE shIndex = @nIndex
FETCH NEXT FROM CRS_KARUS
INTO @nIndex, @strCharID, @strKnightsID, @nLoyalty
END
CLOSE CRS_KARUS
DEALLOCATE CRS_KARUS
DECLARE CRS_HUMAN CURSOR FOR
SELECT nRank, strUserID, strKnightsName, nLoyalty FROM EUSER_RATING
OPEN CRS_HUMAN
FETCH NEXT FROM CRS_HUMAN
INTO @nIndex, @strCharID, @strKnightsID, @nLoyalty
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE USER_KNIGHTS_RANK SET strElmoUserID = @strCharID, strElmoKnightsName = @strKnightsID, nElmoLoyalty = @nLoyalty WHERE shIndex = @nIndex
FETCH NEXT FROM CRS_HUMAN
INTO @nIndex, @strCharID, @strKnightsID, @nLoyalty
END
CLOSE CRS_HUMAN
DEALLOCATE CRS_HUMAN
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[KUSER_RATING]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[KUSER_RATING]
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].[EUSER_RATING]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[EUSER_RATING]
SET NOCOUNT OFF
Evet Geçmiş Olsun
Gel Gelelim Bize Faydalarına
1. GM ler ve Banlı Çarlar Kesinlikle Kareli veya Karesiz NP Simgesi Alamıyor.
2. İlk 50'ye(Aslında 100 dür Ama O KE den Kalma ) Simge Gelmektedir Kareli ve Karesiz Olarak.
3. USER_KNIGHTS_RANK ve USER_PERSONAL_RANK Tablolarını Tamamen Boşaltsanızda, İçeriğini Kendi Doldurur.
4. USER_KNIGHTS_RANK ve USER_PERSONAL_RANK Tablolarında 100 Kayıttan Düşük Kayıt Var ise Yani 99 Tane Veri Var ise Tabloyu Boşaltır Sonra Tekrar INSERT lerini Yapar ve Güncellemeleri Yapar.
5. Kesinlikle Hatasız Çalışmaktadır.
İsteğe Göre SQL Agent a Job Olarak Ekleyebilir,
Kod:
EXEC USER_KNIGHTS_RATING_UPDATE
EXEC UPDATE_PERSONAL_RANK
Kolay Gelsin...