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 menggunakanIF
). 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 bahagianELSE
ialah
SET P_Location = NEW.Rolls - (16 - P_Location)
Di dalam picu. Bolehkah sesiapa menerangkan bagaimana saya boleh melakukan ini?
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.