例如:
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;
Set New.t 不起作用,where 只能选择/插入/更新/删除 stmt。 我无法更改数据库结构(可以设置默认值)。 由于“非空”约束,插入后触发器也不适合。 我找到的唯一解决方案:
insert into test values (New.id, now());
select raise(ignore);
测试数据库仅供说明之用,实际中还有更复杂的情况需要计算数据。可能有这样的“update New set New.t = now()”,或者不是?
不,您无法更新新内容。
我倾向于使用带有 INSTEAD OF 触发器的 VIEW,因为上面评论的 mu 太短。
在您的情况下,最好的解决方案可能是使用 AFTER INSERT/UPDATE 触发器 WHEN NEW.t IS 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...