我有一個觸發器:
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;