Files
ls-2019-source/DB/20171213_Practice/game_practice_rank_reward.sql
2026-11-07 13:30:45 +07:00

198 lines
9.1 KiB
Transact-SQL

USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_rank_reward] Script Date: 11/08/2017 10:09:35 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_rank_reward]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_rank_reward]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_rank_reward] Script Date: 11/08/2017 10:09:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_rank_reward','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_rank_reward
--
--GO
-- =============================================
-- Subject : dbo.game_practice_rank_reward
-- DBA :
-- DATE : 2015-06-17
-- Description : 훈련 데이터 생성
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_rank_reward]
@RankAStart Int, @RankAEnd Int, @RankAMent Int, @RankAPeriad Int,
@RankAType01 Int, @RankACode01 Int, @RankACount01 Int,
@RankAType02 Int, @RankACode02 Int, @RankACount02 Int,
@RankAType03 Int, @RankACode03 Int, @RankACount03 Int,
@RankAType04 Int, @RankACode04 Int, @RankACount04 Int,
@RankAType05 Int, @RankACode05 Int, @RankACount05 Int,
@RankBStart Int, @RankBEnd Int, @RankBMent Int, @RankBPeriad Int,
@RankBType01 Int, @RankBCode01 Int, @RankBCount01 Int,
@RankBType02 Int, @RankBCode02 Int, @RankBCount02 Int,
@RankBType03 Int, @RankBCode03 Int, @RankBCount03 Int,
@RankBType04 Int, @RankBCode04 Int, @RankBCount04 Int,
@RankBType05 Int, @RankBCode05 Int, @RankBCount05 Int,
@RankCStart Int, @RankCEnd Int, @RankCMent Int, @RankCPeriad Int,
@RankCType01 Int, @RankCCode01 Int, @RankCCount01 Int,
@RankCType02 Int, @RankCCode02 Int, @RankCCount02 Int,
@RankCType03 Int, @RankCCode03 Int, @RankCCount03 Int,
@RankCType04 Int, @RankCCode04 Int, @RankCCount04 Int,
@RankCType05 Int, @RankCCode05 Int, @RankCCount05 Int,
@RankDStart Int, @RankDEnd Int, @RankDMent Int, @RankDPeriad Int,
@RankDType01 Int, @RankDCode01 Int, @RankDCount01 Int,
@RankDType02 Int, @RankDCode02 Int, @RankDCount02 Int,
@RankDType03 Int, @RankDCode03 Int, @RankDCount03 Int,
@RankDType04 Int, @RankDCode04 Int, @RankDCount04 Int,
@RankDType05 Int, @RankDCode05 Int, @RankDCount05 Int,
@RankDID varchar(20)
AS
BEGIN
DECLARE @sendIDX int, @receiveIDX int
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName=@RankDID
)
IF (@sendIDX IS NULL)
BEGIN
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='DeveloperK'
)
END
BEGIN TRAN
TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB_Ranking]
TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB_Present]
Declare @CurrentDate DateTime
declare @StartDate NVARCHAR(10), @EndDate NVARCHAR(10), @TableDate NVARCHAR(10)
SET @CurrentDate = GetDate()
SET @StartDate = CONVERT(NVARCHAR(10), @CurrentDate - 7, 23)
SET @EndDate = CONVERT(NVARCHAR(10), @CurrentDate, 23)
SET @TableDate = CONVERT(NVARCHAR(10), @CurrentDate , 112)
INSERT INTO [LosaGame].[dbo].[userPracticeDB_Present]
(
PresentValue, PresentType1, Code1 , Value1, PresentType2, Code2 , Value2, PresentType3, Code3 , Value3, PresentType4, Code4 , Value4, PresentType5, Code5 , Value5
)
VALUES
( 1, @RankAType01, @RankACode01, @RankACount01, @RankAType02, @RankACode02, @RankACount02, @RankAType03, @RankACode03, @RankACount03, @RankAType04, @RankACode04, @RankACount04, @RankAType05, @RankACode05, @RankACount05 ),
( 2, @RankBType01, @RankBCode01, @RankBCount01, @RankBType02, @RankBCode02, @RankBCount02, @RankBType03, @RankBCode03, @RankBCount03, @RankBType04, @RankBCode04, @RankBCount04, @RankBType05, @RankBCode05, @RankBCount05 ),
( 3, @RankCType01, @RankCCode01, @RankCCount01, @RankCType02, @RankCCode02, @RankCCount02, @RankCType03, @RankCCode03, @RankCCount03, @RankCType04, @RankCCode04, @RankCCount04, @RankCType05, @RankCCode05, @RankCCount05 ),
( 4, @RankDType01, @RankDCode01, @RankDCount01, @RankDType02, @RankDCode02, @RankDCount02, @RankDType03, @RankDCode03, @RankDCount03, @RankDType04, @RankDCode04, @RankDCount04, @RankDType05, @RankDCode05, @RankDCount05 )
INSERT INTO [LosaGame].[dbo].[userPracticeDB_Ranking]
(
StartDate, EndDate, AccountIDX, PracticeIDX, PracticeRank, sendIDX, value, msgType, limitDate
)
SELECT @StartDate, @EndDate, AccountIDX as AccountIDX, PracticeIDX AS PracticeIDX, PracticeRank AS PracticeRank, @sendIDX AS sendIDX
, CASE WHEN @RankAStart <= PracticeRank AND PracticeRank <= @RankAEnd THEN 1
WHEN @RankBStart <= PracticeRank AND PracticeRank <= @RankBEnd THEN 2
WHEN @RankCStart <= PracticeRank AND PracticeRank <= @RankCEnd THEN 3
WHEN @RankDStart <= PracticeRank AND PracticeRank <= @RankDEnd THEN 4
ELSE 0
END AS presentType
, CASE WHEN @RankAStart <= PracticeRank AND PracticeRank <= @RankAEnd THEN @RankAMent
WHEN @RankBStart <= PracticeRank AND PracticeRank <= @RankBEnd THEN @RankBMent
WHEN @RankCStart <= PracticeRank AND PracticeRank <= @RankCEnd THEN @RankCMent
WHEN @RankDStart <= PracticeRank AND PracticeRank <= @RankDEnd THEN @RankDMent
END AS msgType
, CASE WHEN @RankAStart <= PracticeRank AND PracticeRank <= @RankAEnd THEN GETDATE() + @RankAPeriad
WHEN @RankBStart <= PracticeRank AND PracticeRank <= @RankBEnd THEN GETDATE() + @RankBPeriad
WHEN @RankCStart <= PracticeRank AND PracticeRank <= @RankCEnd THEN GETDATE() + @RankCPeriad
WHEN @RankDStart <= PracticeRank AND PracticeRank <= @RankDEnd THEN GETDATE() + @RankDPeriad
END AS limitDate
FROM
(
SELECT [AccountIDX], RANK()over(PARTITION BY PracticeIDX ORDER BY PracticeTime, UpdateDate) AS PracticeRank, PracticeIDX, PracticeTime
FROM [LosaGame].[dbo].[userPracticeDB]
WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate())
AND AccountIDX IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB])
) PracticeDB
IF (@@ROWCOUNT = 0) OR (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
RETURN;
END
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType1, Code1, Value1, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code1 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType2, Code2, Value2, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code2 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType3, Code3, Value3, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code3 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType4, Code4, Value4, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code4 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType5, Code5, Value5, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code5 > 0
UPDATE dbo.userGameDB SET practice = 1
--------------------------------------------------------------------
-- 0. 프로시져 시작 할때 userGameDB 백업 하자.
--------------------------------------------------------------------
DECLARE @tblName varchar(256), @sql varchar(256)
SET @tblName = '[Backup].dbo.LosaGame_' + @TableDate + '_userPracticeDB_Ranking'
SET @sql = 'SELECT * INTO ' + @tblName + ' FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue'
execute (@sql)
DECLARE @tblName1 varchar(256), @sqlo varchar(256)
SET @tblName1 = '[Backup].dbo.LosaGame_' + @TableDate + '_userPracticeDB'
SET @sqlo = 'SELECT * INTO ' + @tblName1 + ' FROM [LosaGame].[dbo].[userPracticeDB]'
execute (@sqlo)
TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB]
COMMIT TRAN
END