例如:
create table test (id numeric, t date not null);
create trigger test_in
before insert on test
for each row
when New.t is null
begin
-- set New.t = now();
end;
设置New.t不起作用,where can be only select/insert/update/delete stmt. 我无法更改数据库结构(可以设置默认值)。 插入触发器后也因为“not null”约束而不适合。 我找到的唯一解决方案:
insert into test values (New.id, now());
select raise(ignore);
测试数据库仅用于说明目的,实际上存在计算数据的更复杂情况。可能有这样的“更新New set New.t = now()”,或者没有?
答案 0 :(得分:9)
不,您无法更新新内容。
我倾向于使用带有INSTEAD OF触发器的VIEW,因为mu是短评论。
在您的情况下,最佳解决方案可能是使用AFTER INSERT / UPDATE触发器,当NEW.t为NULL时,在受影响的行中更新t:
CREATE TRIGGER test_in
AFTER INSERT ON test
FOR EACH ROW
WHEN (NEW.t IS NULL)
BEGIN
UPDATE test SET t = now() WHERE id = NEW.id;
END;
仅供参考,您的id
列可能应该被声明为INTEGER PRIMARY KEY ......