【发布时间】:2021-03-12 01:59:09
【问题描述】:
我正在开发一个 SQLite 触发器,当且仅当考虑中的所有列中的数据实际发生变化时,它才会更新“已修改”字段。
我已经非常接近了:
CREATE TRIGGER "main"."Orders_modified"
BEFORE UPDATE OF "order_date", "grand_total_in_dollars", "ship_to", "store", "more_href", "order_id", "grand_total" ON "Orders"
BEGIN
UPDATE Orders
SET modified=(STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW', 'localtime'))
WHERE (OLD.order_id=NEW.order_id)
AND (
(OLD.order_date != NEW.order_date) OR
(OLD.grand_total_in_dollars != NEW.grand_total_in_dollars) OR
(OLD.ship_to != NEW.ship_to) OR
(OLD.store != NEW.store) OR
(OLD.more_href != NEW.more_href) OR
(OLD.grand_total != NEW.grand_total)
);
END;
问题是,第一次将值放入任何这些字段时,它不起作用;即,当旧值为“空”时。否则效果很好。
我对此的临时解决方法是将所有受监控的字段默认为空字符串,但我想了解为什么(如果)这是必要的。
关于为什么会出现这种情况的任何提示以及任何可能的解决方法?
非常感谢。
【问题讨论】:
标签: sqlite triggers null timestamp last-modified