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

来源:未知 责任编辑:智问网络 发表时间:2013-10-30 11:12 点击:

申明本博客转至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)从创建开始,会在系统表里保存两天。
 

有错误的地方欢迎大家拍砖,希望交流和共享

作者 MR_ke
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Request.ServerVariables 参数大全
    • 执行全文索引时出现权限不足的解决方法
    • 导入excel文件处理流程节点的解决方案
    • 查看sql修改痕迹(SQL Change Tracking on Table)
    • MongoDB安装为Windows服务方法与注意事项
    • App数据层设计及云存储使用指南
    • PostgreSQL启动过程中的那些事三:加载GUC参数
    • 写给MongoDB开发者的50条建议Tip1
    • Percolator与分布式事务思考(二)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1