我有一个字段是"时间戳"类型,称为" inserted_when"。 如何在插入后更新此字段(插入时间戳)(因此它仅适用于选定的插入记录)?通过触发当然...... 编辑:
我尝试了这个,但似乎无法使未注释的部分起作用。
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 ; ^
答案 0 :(得分: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
触发器中修改。
答案 1 :(得分:3)
您只能更新BEFORE UPDATE
触发器中要更新的字段。
在触发器中,您可以执行以下操作:
new.inserted_when = current_timestamp;
为每个更新的记录调用触发器。
如果您在UPDATE MYTABLE
中执行AFTER UPDATE
,则可能会无限循环。
答案 2 :(得分:1)
或者只有CURRENT_TIMESTAMP
的inserted_when列的默认值不需要触发器