70 lines
1.8 KiB
Transact-SQL
70 lines
1.8 KiB
Transact-SQL
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)
|