USE [SRO_VT_SHARD] GO /****** Object: StoredProcedure [dbo].[_TRAINING_CAMP_UPDATEHONORRANK] Script Date: 06/03/2012 10:09:05 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[_TRAINING_CAMP_UPDATEHONORRANK] AS SET NOCOUNT ON -- ÀÏ´Ü ·©Å· Å×À̺íÀ» ¼¼ÆÃÇÑ´Ù. DECLARE @Ranking INT SET @Ranking = 1 DECLARE @CampID INT DECLARE @Rank TINYINT BEGIN TRANSACTION DECLARE RankCursor CURSOR FAST_FORWARD FOR SELECT TOP 50 [ID] FROM _TrainingCamp WITH (NOLOCK) WHERE EvaluationPoint >= 10 ORDER BY EvaluationPoint DESC, LatestEvaluationDate ASC -- ÀÏ´Ü Àüü ·©Å·À» ¾øÀ½À¸·Î Ç¥½ÃÇÏÀÚ. UPDATE _TrainingCamp SET Rank = 5 WHERE Rank <> 5 IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION DEALLOCATE RankCursor RETURN -1 END -- ·©Å· Å×ÀÌºíµµ ÃʱâÈ*ÇÏÀÚ. UPDATE _TrainingCampHonorRank SET CampID = null, Rank = null IF (@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION DEALLOCATE RankCursor RETURN -1 END OPEN RankCursor FETCH NEXT FROM RankCursor INTO @CampID WHILE @@FETCH_STATUS = 0 BEGIN IF @Ranking <= 5 BEGIN SET @Rank = 1 END ELSE IF @Ranking <= 15 BEGIN SET @Rank = 2 END ELSE IF @Ranking <= 30 BEGIN SET @Rank = 3 END ELSE BEGIN SET @Rank = 4 END UPDATE _TrainingCamp SET Rank = @Rank WHERE [ID] = @CampID IF (@@ERROR <> 0 OR @@ROWCOUNT = 0) BEGIN ROLLBACK TRANSACTION CLOSE RankCursor DEALLOCATE RankCursor RETURN -2 END UPDATE _TrainingCampHonorRank SET CampID = @CampID, Rank = @Rank WHERE Ranking = @Ranking IF (@@ERROR <> 0 OR @@ROWCOUNT = 0) BEGIN ROLLBACK TRANSACTION CLOSE RankCursor DEALLOCATE RankCursor RETURN -3 END SET @Ranking = @Ranking + 1 FETCH NEXT FROM RankCursor INTO @CampID END CLOSE RankCursor DEALLOCATE RankCursor -- ¸¶Áö¸·À¸·Î °»½ÅÇÑ ³¯Â¥¸¦ Àû¾îº¸ÀÚ!!! IF EXISTS (SELECT LastUpdateDate FROM _TrainingCampHonorRankUpdateDate) BEGIN UPDATE _TrainingCampHonorRankUpdateDate SET LastUpdateDate = GETDATE() END ELSE BEGIN INSERT INTO _TrainingCampHonorRankUpdateDate VALUES (GETDATE()) END IF (@@ERROR <> 0 OR @@ROWCOUNT = 0) BEGIN ROLLBACK TRANSACTION RETURN -4 END COMMIT TRANSACTION SET NOCOUNT OFF RETURN 1