3

我的触发器有点问题。我创建了一个触发器:

BEGIN 

IF((SELECT `Wert` 
    FROM parameter_history 
    WHERE `BusNr` = NEW.BusNr AND `MesswertNr` = NEW.MesswertNr 
    ORDER BY `Timestamp` DESC LIMIT 1) != NEW.Value) 


THEN 
    INSERT INTO parameter_history (`BusNr`, `MesswertNr`, `Value`) 
    VALUES (NEW.BusNr, NEW.MesswertNr, NEW.Value); 
END IF; 

END 

触发器的事件是在更新之后。如果已经有一个New.Value它真的很好用。但如果New.Value我的数据库中没有,它就不起作用,我不知道为什么。问题是,当我的表中实际上没有条目时,我无法从“NEW.Value”中获取值。使用 MySQL-Programm 我得到“0 Rows found”,我想解决这个问题。

有谁能够帮我?

亲切的问候

4

1 回答 1

0

当然,如果您的声明中已经有 NEW.value ,它会起作用,

    IF((select x) != NEW.Value)  // select x only when it does not equal 
//what the current value of New.Value is.

THEN  // preform my insert statement. 
    INSERT INTO parameter_history (`BusNr`, `MesswertNr`, `Value`) 
    VALUES (NEW.BusNr, NEW.MesswertNr, NEW.Value); 

END IF;

现在考虑New.Value不存在或者为空(null)的情况,你正在运行,只有当它不等于时才选择x???? .

您将返回 0 行。

我不太确定您正在构建什么,但为什么不使用 New.Value 的默认值,然后在需要时运行一个过程来更新它,然后您的触发器将在非空字段上更新后执行?

于 2012-09-25T22:34:48.663 回答