如何利用Trigger來建立資料表異動記錄(SQL SERVER)
在歷經產品上線後,我們常常被詢問到一些問題:
- 哪些資料是經常被更新的?
- 哪些資料表是不常被修改的?
- 是誰將該資料改為100,是什麼時候改的?
- 這商品的價錢是什麼時候改為99元的?
而為了達到此需求有幾種的解決方案:
- 在程式設計的時候就加入log的機制,當有異動的內容全都記錄下來
- 可利用資料庫的功能,例如利用trigger的功能來記錄資料表的異動
本篇說明如果利用trigger的方式:
在網路參考到一篇類似的作法 Nigel Rivett’s SQL Server Auditing triggers,但其原理為建立一audit表格,其用來記錄目前標的的表格異動,當異動產生 ,原封不動記錄異動每個欄位資料至audit表格中(但多加一timestamp欄位)。
但以上做法在網路上討論也有效能的爭議。而是否有折衷的做法,在每次異動時,僅記錄有異動的欄位即可,請看下面的介紹:
首先建立一Audit表格,用來記錄異動資料,script由此下載,其欄位如下:
:
欄位說明
Type:異動行為: U(更新)、i(新增)、D(刪除)
TableName:資料表名
PrimaryKeyField:主鍵名稱(P K)
PrimaryKeyValue:主鍵值(PK value)
FieldName:有異動的欄位名稱
OldValue:原資料值(最多取varchar(1000),超過會截斷)
NewValue:異動後的值(最多取varchar(1000),超過會截斷)
UpdateDate:異動時間
UpdateName:異動使用者名稱(若是程式就是connect string中填的帳號)
產生Trigger 的script 從這下載,
注意:必須將以下變數換成實際的值
__YOUR_TRIGGER_NAME :產生的trigger的名稱
__YOUR_TABLE_NAME(有二個地方要換):要偵測異動目標的表格名稱
近期留言