USE [LosaGame] GO /****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_Reward] Script Date: 2018-01-12 오전 10:31:38 ******/ DROP PROCEDURE [dbo].[game_PCBangPlayTime_Reward] GO /****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_Reward] Script Date: 2018-01-12 오전 10:31:38 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --IF OBJECT_ID('dbo.game_PCBangPlayTime_Reward','P') IS NOT NULL -- -- DROP PROC dbo.game_PCBangPlayTime_Reward -- --GO -- ============================================= -- Subject : dbo.game_PCBangPlayTime_Reward -- DBA : -- DATE : 2015-06-17 -- Description : 훈련 데이터 생성 -- ============================================= CREATE PROCEDURE [dbo].[game_PCBangPlayTime_Reward] AS BEGIN DECLARE @LimitTime INT = 30 DECLARE @DateTime NVARCHAR(10) = CONVERT(NVARCHAR(10), GetDate(), 112) DECLARE @sendIDX int, @receiveIDX int SET @sendIDX = ( SELECT accountIDX FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK) WHERE nickName='개발자K' ) IF (@sendIDX IS NULL) BEGIN SET @sendIDX = ( SELECT accountIDX FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK) WHERE nickName='DeveloperK' ) END DECLARE @PCbangIndex int = 0, @PCBangCount int = 0 DECLARE PCBangPlayTime CURSOR FOR SELECT PCBangIndex, count(PCBangIndex) AS PCBangCount FROM LosaGame.dbo.userPCBangPlayTimeDB WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate()) AND PCBangPlayTime >= 30 AND PCBangDate = @DateTime GROUP by PCBangDate, PCBangIndex ORDER BY PCBangDate, PCBangIndex OPEN PCBangPlayTime FETCH NEXT FROM PCBangPlayTime INTO @PCbangIndex , @PCBangCount WHILE @@FETCH_STATUS = 0 BEGIN SELECT PCBangDate, AccountIDX, @PCBangCount AS PCBangcount, CASE WHEN @PCBangCount >= 5 THEN 500 WHEN @PCBangCount >= 4 THEN 300 WHEN @PCBangCount >= 3 THEN 200 WHEN @PCBangCount >= 2 THEN 150 ELSE 100 END AS presentGold FROM LosaGame.dbo.userPCBangPlayTimeDB WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate()) AND PCBangPlayTime >= 30 AND PCBangDate = @DateTime AND PCBangIndex = @PCbangIndex MERGE LosaGame.dbo.userPCBangPregentDB AS Target USING (SELECT PCBangDate, AccountIDX, @PCBangCount AS PCBangcount, CASE WHEN @PCBangCount >= 5 THEN 500 WHEN @PCBangCount >= 4 THEN 300 WHEN @PCBangCount >= 3 THEN 200 WHEN @PCBangCount >= 2 THEN 150 ELSE 100 END AS presentGold FROM LosaGame.dbo.userPCBangPlayTimeDB WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate()) AND PCBangPlayTime >= 30 AND PCBangDate = @DateTime AND PCBangIndex = @PCbangIndex) AS Source ON (Target.AccountIDX = Source.AccountIDX AND Target.PCBangDate = Source.PCBangDate) WHEN MATCHED AND Target.PCBangcount < Source.PCBangcount THEN UPDATE SET Target.PCBangCount = Source.PCBangcount, Target.PCBangBonusCash = Source.presentGold WHEN NOT MATCHED BY TARGET THEN INSERT (PCBangDate, AccountIDX, PCBangCount, PCBangBonusCash) VALUES (Source.PCBangDate, Source.AccountIDX, Source.PCBangcount, Source.presentGold) OUTPUT $action, Inserted.*, Deleted.*; -- 커서를다음칸으로이동시킨다. FETCH NEXT FROM PCBangPlayTime INTO @PCbangIndex , @PCBangCount END CLOSE PCBangPlayTime DEALLOCATE PCBangPlayTime INSERT INTO LosaGame.dbo.userPresentDB ( sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate ) SELECT @sendIDX, AccountIDX, 13, PCBangBonusCash, 7, 0, 0, 1132, 0, GETDATE() + 7, Getdate() FROM LosaGame.dbo.userPCBangPregentDB WHERE PCBangDate = @DateTime END GO