2009-04-11 69 views
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 

此刻,这将更改的值存储在审计表中,这是不可取的。

只有在我的审计表中存储更改的列的最佳方式是什么?

+0

你能解释为什么存储所有值是不受欢迎的吗?通常,我将审计表视为表中值的历史记录,并希望在修改时间和执行时间的同时保存此时间点的所有值。 – tvanfosson 2009-04-11 14:36:46

回答

1

根据您的意见,我不会担心只存储更改的值 - 磁盘空间很便宜。存储实际值具有的优点是,如果您需要急于恢复记录到某个时间点,它会变得微不足道。如果您需要生成一个可读的审计记录,然后将其存储在varchar/nvarchar中,并通过将更改累积到字符串中来构建消息。除了实际值之外,我可能会将其存储起来。请注意,您还可以提供一个表值函数,它可以为您动态构造这个可读取的列,而不是存储它。

相关问题