我有一个触发器:
CREATE TRIGGER Moves AFTER INSERT ON Rolls FOR EACH ROW UPDATE Players CASE WHEN P_Location + NEW.Rolls < 17 THEN SET P_Location = P_Location + NEW.Rolls WHERE id = NEW.Player_id ELSE SET P_Location = NEW.Rolls - (16 - P_Location) END;
但是语法在某些地方不正确并产生错误。我已经在这个网站上检查过类似的问题,但我查看的问题似乎使用了在这种情况下似乎不起作用的方法(特别是使用 IF
)。我希望主要条件是
IF P_Location + NEW.Rolls < 17 THEN SET P_Location = P_Location + NEW.Rolls WHERE id = NEW.Player_id
而 ELSE
部分为
SET P_Location = NEW.Rolls - (16 - P_Location)
在触发器内。谁能解释一下我该如何做到这一点?
P粉9564410542023-09-12 11:03:52
CASE 表达式的计算结果必须为标量,但您要通过 CASE 表达式连接其他子句。
您可以这样做,因此 CASE 的结果返回一个标量,并将该标量分配给 P_Location 列。
UPDATE Players SET P_Location = CASE WHEN P_Location + NEW.Rolls < 17 THEN P_Location + NEW.Rolls ELSE NEW.Rolls - (16 - P_Location) END WHERE id = NEW.Player_id;