繁体   English   中英

SQL中使用CASE触发多个SET语句?

[英]Multiple SET statements in SQL trigger using CASE?

我的SQL数据库中有一个表,其中包含一个名为“ event_attributes”的列。 它是一个字符串,每个单元格都包含以下内容:

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

使用下面的代码,我可以将其用于一个set语句。

 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语句嵌套到一个触发器中? 抱歉,这是一个愚蠢的问题-此为新问题。

谢谢!

您应该使用逗号列出多个字段。 这是一个简洁的示例:

create trigger test before insert on sometable
for each row 
set NEW.field2 = case when New.field1 = 1 then 2 else 0 end, 
    NEW.field3 = case when New.field1 = 1 then 3 else 0 end;

顺便说一句,尽管您的else语句在技术上NEW.discipline = NEW.discipline = NULL ,但是您基本上是在设置NEW.discipline = NEW.discipline = NULL 使用else null会更好一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM