要修改你的 SQL 触发器代码,以便新建触发器使得当人物等级大于49时任务值就满,可以调整你原有的 TR_UPDATE_TBLGAMEID1 触发器代码中的条件检查。下面是调整后的代码:
- USE redmoon
- GO
- -- 删除原有的触发器(如果存在)
- IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'TR_UPDATE_TBLGAMEID1'))
- DROP TRIGGER TR_UPDATE_TBLGAMEID1;
- GO
- -- 创建新的触发器
- CREATE TRIGGER TR_UPDATE_TBLGAMEID1 ON TBLGAMEID1
- FOR UPDATE
- AS
- BEGIN
- IF UPDATE(Lvl)
- BEGIN
- DECLARE @GAMEID CHAR(14)
- DECLARE @LEVEL INT
- DECLARE crGAMEID CURSOR FOR SELECT GAMEID, LVL FROM INSERTED
- OPEN crGAMEID
- FETCH NEXT FROM crGAMEID INTO @GAMEID, @LEVEL
- WHILE @@FETCH_STATUS = 0
- BEGIN
- IF @LEVEL > 49
- BEGIN
- UPDATE TBLGAMEID1 SET StoryQuestState = 131071 WHERE GAMEID = @GAMEID
- END
- FETCH NEXT FROM crGAMEID INTO @GAMEID, @LEVEL
- END
- CLOSE crGAMEID
- DEALLOCATE crGAMEID
- END
- END;
- GO
复制代码
这个触发器在 TBLGAMEID1 表上,当有记录的 Lvl 字段被更新时触发。如果更新后的等级大于49,则将该记录的 StoryQuestState 设置为131071(假设这代表任务值满)。使用游标遍历 INSERTED 虚拟表中的所有被更新的记录,对符合条件的记录进行更新。 如果你不再需要这个触发器,可以使用以下 SQL 语句删除它:
- DROP TRIGGER IF EXISTS TR_UPDATE_TBLGAMEID1;
- GO
复制代码确保在测试或生产环境中运行这些代码之前,备份相关数据,以避免任何意外的数据丢失。如果你在执行过程中遇到任何错误,请告诉我错误信息,我会帮助你调试。
|