我在我的SQL数据库中有一个表,其中包含一个名为'event_attributes'的列。这是一个字符串,每个单元拥有这样的事情:使用CASE的SQL触发器中的多个SET语句?
a:4{s:10:"Discipline";s:7:"Running";s:5:"Level";s:3:"All";s:10:"Instructor";s:13:"Bill Jones";s:3:"Free";s:2:"No";}
我试图创建一个闯入看起来像
Disciple | Level | Instructor | Free
-----------------------------------------
Running | All | Bill Jones | No
使用下面的代码的几个新列下来触发,我可以得到这个工作的一套声明。
DROP TRIGGER IF EXISTS `recode`;
CREATE TRIGGER `recode`
BEFORE INSERT ON `wp_em_events`
FOR EACH ROW
SET NEW.discipline = CASE
WHEN NEW.event_attributes LIKE '%Boxing%' THEN 'Boxing'
WHEN NEW.event_attributes LIKE '%Climbing%' THEN 'Climbing'
WHEN NEW.event_attributes LIKE '%Cycling%' THEN 'Cycling'
WHEN NEW.event_attributes LIKE '%Yoga%' THEN 'Yoga'
ELSE NEW.discipline = NULL
END
但是,如果我添加类似:
SET NEW.level = CASE
WHEN NEW.event_attributes LIKE '%All%' THEN 'All'
....
我得到一个消息,说有我的SQL语法错误。任何人都知道如何将两个或多个SET语句嵌套到一个触发器中?对不起,如果这是一个愚蠢的问题 - 在这个新的。
谢谢!
而不是增加额外的'set'语句,我认为你应该使用逗号 - 'set new.field = blah,new.field2 = blah2' ... – sgeddes
这条线有问题。 'ELSE NEW.discipline = NULL',它应该是'ELSE NULL',或者如果所有条件都失败,你可以省略'ELSE'部分作为缺省值'null' –