2

我正在尝试在我的表上创建一个触发器,以便当我插入数据时,它会尝试从一列(注释)中获取数据并使用数据更新另一个表的(masterData)列注释(附加)。如果找不到,我希望将插入语句复制到不同的表(failedtofind)。我的触发器在下面,但它报告我的 IF 语句存在语法错误,我无法让它正常工作:

DELIMITER $$
TRIGGER `testdb`.`testTable`
AFTER INSERT ON `testdb`.`testTable`
FOR EACH ROW
BEGIN    
    IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 )
        UPDATE masterData AS t
        SET t.Additional = NEW.Notes
        WHERE t.PrimaryID = NEW.PrimaryID;
    ELSE
        INSERT IGNORE INTO failedtofind SET (all the columns);
    END IF;

END$$

另外,这是我应该这样做的方式吗?我是数据库新手,所以一如既往,如果我做错了什么,请随时纠正我。

4

1 回答 1

3

你错过了THEN应该IF(...)

 IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 ) THEN
 ...

我不确定> 0应该做什么 - 如果没有找到具有该 PrimaryID 的记录,则 SELECT 语句将评估为NULL(不是 0)。但它仍应按预期工作,因为NULL > 0计算结果为NULL并且它将在failedtofind.

于 2012-07-30T01:12:15.873 回答