0

我正在使用触发器将更改存储在审计表中,我只想存储已更改列中的值。

BEGIN
IF NEW.history_of_repair_trigger_fired = 1 THEN
INSERT INTO history_of_repair SET
edit_date_time=NEW.last_edited_date_time,
edited_by=NEW.edited_by,
repair_id=NEW.repair_id,
tenant_name=NEW.tenant_name,
property_id=NEW.property_id,
priority=NEW.priority,
comments=NEW.comments,
signed_off=NEW.signed_off;
END IF;
END

目前这也将未更改的值存储在审计表中,这是不可取的。

仅将更改的列存储在我的审计表中的最佳方法是什么?

4

1 回答 1

1

根据您的评论,我不会担心只存储更改的值——磁盘空间很便宜。存储实际值的好处是,如果您需要赶时间,可以轻松地将记录恢复到某个时间点。如果您需要生成人类可读的审计记录,请将其存储在 varchar/nvarchar 中,并通过将更改累积到字符串中来在触发器中构造消息。除了实际值之外,我可能还会存储它。请注意,您还可以提供一个表值函数,该函数为您动态构建这个人类可读的列,而不是存储它。

于 2009-04-11T15:58:18.167 回答