2012-02-01 150 views
1

我想写一个触发器。 触发工作在以下方式:根据If条件在Mysql触发器中使用Select INTO语句

当表R_published获取进入一个新的条目,基于列的值(R_published.whichPublishable),它需要从任一project_task_goodread_master表或project_document_master表复制到一排R_publishedGoodReads或R_publishedDocuments表分别。

我写了下面的扳机,我得到的错误:“#1327 - 未声明的变量:R_publishedGoodReads”

CREATE TRIGGER trigger_after_published 

    AFTER INSERT ON R_published 

    FOR EACH ROW 

    BEGIN 

    IF (NEW.whichPublishable=1) THEN 

     SELECT * INTO R_publishedGoodReads FROM project_task_goodread_master 
WHERE 

goodReadID= new.publishedItemId; 

    ELSEIF (NEW.whichPublishable=2) THEN 

     SELECT * INTO R_publishedDocuments FROM project_document_master where 

documentID=new.publishedItemId; 

     END IF 

END 

这有什么错的语法?我是否需要声明我用于插入的表名称?谢谢。

回答

0

尝试代替:

IF (NEW.whichPublishable=1) THEN 
    INSERT INTO R_publishedGoodReads (col1, col2...) 
    SELECT col1, col2... FROM project_task_goodread_master 
    WHERE goodReadID= new.publishedItemId; 
+0

CREATE TRIGGER trigger_after_published INSERT后R_published FOR EACH ROW BEGIN IF(NEW.whichPublishable = 1)THEN INSERT INTO R_publishedGoodReads SELECT * FROM project_task_goodread_master WHERE goodReadID = new.publishedItemId; ELSEIF(NEW.whichPublishable = 2)THEN INSERT INTO R_publishedDocuments SELECT * FROM project_document_master 其中 documentID = new.publishedItemId; END IF END; – Rujuta 2012-02-01 17:42:28

+0

它仍然给我folliwing错误:#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,在第11行的''附近使用正确的语法。 – Rujuta 2012-02-01 17:43:55

+0

不确定第11行是否正确,但尝试明确列出要插入的列名。 'INSERT INTO R_publishedGoodReads(COL1,COL2)SELECT COL1,col2'而非'INSERT INTO R_publishedGoodReads SELECT *' – Bort 2012-02-01 17:46:38