CREATE PROCEDURE [dbo].[up_update_guild_level] ( @guild_id [uniqueidentifier] ,@character_id [uniqueidentifier] ,@need_exp BIGINT ,@need_gold INT ,@max_member INT ) AS SET NOCOUNT ON DECLARE @player_gold INT, @guild_exp BIGINT, @guild_level INT, @erro_code INT BEGIN TRAN SET @erro_code = -1 -- SELECT 구문에 WITH (READUNCOMMITTED) 제거 IF EXISTS (SELECT [level] FROM GuildTable WHERE guild_id = @guild_id ) BEGIN --플레이어 돈 삭제 SELECT @player_gold = [gold] FROM [dbo].[CharacterTable] WHERE [character_id] = @character_id IF(@player_gold - @need_gold) > 0 BEGIN UPDATE [dbo].[CharacterTable] SET [gold] = (@player_gold - @need_gold) WHERE [character_id] = @character_id END ELSE BEGIN UPDATE [dbo].[CharacterTable] SET [gold] = 0 WHERE [character_id] = @character_id END --길드 경험치 변경 밎 레벨 업 SELECT @guild_exp = [experience], @guild_level = [level] FROM GuildTable WHERE guild_id = @guild_id IF(@guild_exp - @need_exp) > 0 BEGIN UPDATE [dbo].[GuildTable] SET [max_member] = @max_member --멤버수 변경 jojo ,[experience] = (@guild_exp - @need_exp) ,[level] = @guild_level + 1 WHERE guild_id = @guild_id END ELSE BEGIN UPDATE [dbo].[GuildTable] SET [max_member] = @max_member --멤버수 변경 jojo ,[experience] = 0 ,[level] = @guild_level + 1 WHERE guild_id = @guild_id END END DECLARE @ERR INT SET @ERR = @@ERROR IF @ERR <> 0 BEGIN ROLLBACK TRAN; END ELSE BEGIN COMMIT TRAN; END RETURN (@ERR)