查看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 > 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 > 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 > 1 and CT.Sys_Change_Operation <> 'D'


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM