2

我有一个“时间戳”类型的字段,称为“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 ; ^
4

3 回答 3

4

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

因此,您需要将触发器更改为:

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

请注意,OLD上下文变量永远不可修改,并且NEW上下文变量只能在BEFORE触发器中修改。

于 2014-09-01T18:18:34.803 回答
3

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

在触发器中,您可以执行以下操作:

new.inserted_when = current_timestamp;

为每个更新的记录调用触发器。

如果你在做UPDATE MYTABLEin AFTER UPDATE,你可能会陷入无限循环。

于 2014-09-01T17:45:36.870 回答
1

或者只是为 CURRENT_TIMESTAMP 的 insert_when 列设置一个默认值

那时不需要触发器

于 2014-09-02T14:57:49.890 回答