2009-04-11 60 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中,並通過將更改累積到字符串中來構建消息。除了實際值之外,我可能會將其存儲起來。請注意,您還可以提供一個表值函數,它可以爲您動態構造這個可讀取的列,而不是存儲它。

相關問題