2014-09-01 410 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