Rumah > Soal Jawab > teks badan
Saya ada pencetus:
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;
Tetapi sintaks tidak betul di sesetengah tempat dan menghasilkan ralat. Saya telah menyemak soalan serupa di tapak ini, tetapi soalan yang saya lihat nampaknya menggunakan kaedah yang nampaknya tidak berkesan dalam kes ini (khususnya menggunakan IF
). Saya harap syarat utama adalah
IF P_Location + NEW.Rolls < 17 THEN SET P_Location = P_Location + NEW.Rolls WHERE id = NEW.Player_id
dan bahagian ELSE
ialah
SET P_Location = NEW.Rolls - (16 - P_Location)
Di dalam picu. Bolehkah sesiapa menerangkan bagaimana saya boleh melakukan ini?
P粉9564410542023-09-12 11:03:52
Ungkapan CASE mesti dinilai kepada skalar, tetapi anda menyambungkan klausa lain melalui ungkapan CASE.
Anda boleh melakukannya supaya hasil CASE mengembalikan skalar dan menetapkan skalar itu kepada lajur 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;