查看sql修改痕跡(SQL Change Tracking on Table)

 

申明本博客轉至http://www.codeproject.com/Articles/338724/SQL-Change-Tracking-on-Table

在閱讀這篇博客之前,我想告訴你我並不是經常寫博客,這只是一個嘗試,如果寫的不好請見諒,我僅僅想告訴你們一些sql內在機制。

憑經驗,很多時候我們都人事爲觸發器不是最好查找一個表修改痕跡的方法,觸發器跟插入 修改 刪除等動作緊緊的聯繫再一次,可能在我們

未來的修改發佈中產生很多問題。那我現在告訴你一個及時查看修改表記錄的方法。

1.修改數據庫配置,允許數據庫進行修改跟蹤。

Alter Database RDCC
set change_tracking = on
(change_retention = 2 days, auto_cleanup = on);

複製代碼

數據庫修改跟蹤權限開啓了,不是所有表的跟蹤權限都開啓了,每個表還必須單獨開啓。

2.首先我們建一個簡單的表然後插入幾條記錄。

Create table Employee
(
EmployeeID nvarchar(10) primary key,
FirstName nvarchar(100),
LastName nvarchar(100),
Phone1 nvarchar(10)
)

insert into Employee (EmployeeID,FirstName,LastName,Phone1) Values ('E001','Santosh','Poojari','1111111111')
insert into Employee (EmployeeID,FirstName,LastName,Phone1) Values ('E002','Karan','Shah','2222222222')
insert into Employee (EmployeeID,FirstName,LastName,Phone1) Values ('E003','Vineesh','Padmanabhan','3333333333')
insert into Employee (EmployeeID,FirstName,LastName,Phone1) Values ('E004','Gautam','Sharma','4444444444')

複製代碼

在數據庫允許跟蹤之後,我們還必須把把表設置成可跟蹤。

ALTER TABLE Employee ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON);

那麼現在我們開始跟蹤表的修改

update employee set Phone1 ='12121212' where EmployeeID ='E001'
update employee set Phone1 ='21212121' where EmployeeID ='E002'

複製代碼

然後我們查看修改記錄:

SELECT ISNUll(pn.EmployeeID,0) as EmployeeID
from changetable(changes employee, 1) as ct
INNER JOIN employee pn on pn.EmployeeID = CT.EmployeeID
WHERE SYS_CHANGE_VERSION &gt; 1 and CT.Sys_Change_Operation <>'D'

複製代碼

我們看到的是employee表修改過的EmployeeID對應的行值。

下面我們看看整個修改記錄:

SELECT *
from changetable(changes employee, 1) as ct
INNER JOIN employee pn on pn.EmployeeID = CT.EmployeeID
WHERE SYS_CHANGE_VERSION &gt; 1 and CT.Sys_Change_Operation <> 'D'

複製代碼

列SYS_CHANGE_OPERATION顯示的是操作類型,那麼我們再做一條插入操作並查看結果:

insert into Employee (EmployeeID,FirstName,LastName,Phone1) Values ('E006','S','G','555555')

GO

SELECT *
from changetable(changes employee, 1) as ct
INNER JOIN employee pn on pn.EmployeeID = CT.EmployeeID
WHERE SYS_CHANGE_VERSION &gt; 1 and CT.Sys_Change_Operation <> 'D'

複製代碼

那麼我們看到SYS_CHANGE_OPERATION多了一條插入記錄類型爲I.那麼數據庫表的任意改動我們都可以通過代碼跟蹤到。而且一個修改記錄的即(sys_change_version)從創建開始,會在系統表裏保存兩天。

有錯誤的地方歡迎大家拍磚,希望交流和共享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章