2011-12-31 47 views
8

我不知道我的代码有什么问题。使用其他如果在sql触发器时出错

delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
ELSE IF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
END$$ 

上述版本不起作用。它说“END”(最后一行)附近的语法错误。但是,当我使用的东西有效

delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
IF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
END$$ 

我不知道为什么。我错过了什么吗?

回答

20

而不是ELSE IFMySQL's syntax使用ELSEIF(没有空格)。

delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
ELSEIF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
END IF; 
END$$ 

尽管您可能能够通过增加一个额外END IF,使其与空间ELSE IF工作。通过使用该空间,可以有效地启动第二个IF语句,该语句必须独立于第一个外部IF语句而关闭。

/* Might work */ 
delimiter $$ 
CREATE TRIGGER updateRestaurantAtributes 
AFTER UPDATE ON fields_data 
FOR EACH ROW BEGIN 
IF (NEW.fieldid = 1) THEN 
    UPDATE restaurants 
    SET address1 = NEW.data_txt 
    Where rid = NEW.itemid; 
/* Opens a seconds IF block which must be closed */ 
ELSE IF (NEW.fieldid = 2) THEN 
    UPDATE restaurants 
    SET address2 = NEW.data_txt 
    Where rid = NEW.itemid; 
    /* Close inner IF block */ 
    END IF; 
END IF; 
END$$ 
+0

添加链接,语法:-) http://dev.mysql.com/doc/refman/5.5/en/if-statement.html – 2011-12-31 02:51:12

+0

@AdrianCornish由于它已经在那里挂的话“ MySQL的语法“ – 2011-12-31 02:52:31

+0

我的歉意 - 我没有点击链接 – 2011-12-31 02:55:20