2014-09-01 117 views
2

我有一个字段,它是“时间戳”类型,名为“inserted_when”。 如何在插入后更新此字段(插入时间戳)(因此它只适用于选定的插入记录)?通过当然触发... 编辑:插入触发后的Firebird - 插入时间戳插入行

我试过这个,但似乎不能使未注释的部分工作。

SET TERM^; 
CREATE TRIGGER AFTER_INSERT FOR MYTABLE 
ACTIVE AFTER INSERT POSITION 1 
AS 
BEGIN 
     UPDATE MYTABLE 
     SET MYTABLE.inserted_when = current_timestamp; 

    ---- where mytable.ID = Inserted.ID 
END^ 

SET TERM ;^

回答

4

要更新正在插入的记录,您需要使用触发器BEFORE UPDATE,而不是触发器AFTER UPDATE。可以通过NEW上下文变量(也有一个OLD上下文变量,但在插入触发器中不相关)访问(和更新)要插入的行的值。请注意,Firebird每行触发一次。

所以,你需要你的触发更改为:

CREATE TRIGGER BEFORE_INSERT_MYTABLE FOR MYTABLE 
ACTIVE BEFORE INSERT 
AS 
BEGIN 
     NEW.inserted_when = current_timestamp; 
END 

注意,OLD上下文变量是永远不会改变的,而NEW上下文变量是只在BEFORE触发修改。

2

您只能更新要在BEFORE UPDATE触发器中更新的字段。

在扳机,你可以这样做:

new.inserted_when = current_timestamp; 

触发被称为更新的每一条记录。

如果您在做UPDATE MYTABLEAFTER UPDATE,您可能会以无限循环结束。

1

或者只是有CURRENT_TIMESTAMP

没有必要再

+0

很好触发的inserted_when列的默认值 - 不知道这样的事情可以做。 – user3927897 2014-09-03 02:50:15