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

本博客转至http://www.xuebuyuan.com/108399.html

在阅读这篇博客之前,我想告诉你我并不是经常写博客,这只是一个尝试,如果写的不好请见谅,我仅仅想告诉你们一些sql内在机制。

凭经验,很多时候我们都人事为触发器不是最好查找一个表修改痕迹的方法,触发器跟插入 修改 删除等动作紧紧的联系再一次,可能在我们

未来的修改发布中产生很多问题。那我现在告诉你一个及时查看修改表记录的方法。

1.修改数据库配置,允许数据库进行修改跟踪。

Alter Database RDCCset 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 ctINNER JOIN employee pn on pn.EmployeeID = CT.EmployeeIDWHERE SYS_CHANGE_VERSION > 1 and  CT.Sys_Change_Operation <>‘D‘

我们看到的是employee表修改过的EmployeeID对应的行值。

下面我们看看整个修改记录:

SELECT  *from changetable(changes employee, 1) as ctINNER JOIN employee pn on pn.EmployeeID = CT.EmployeeIDWHERE 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 ctINNER JOIN employee pn on pn.EmployeeID = CT.EmployeeIDWHERE SYS_CHANGE_VERSION > 1 and  CT.Sys_Change_Operation <> ‘D‘

那么我们看到SYS_CHANGE_OPERATION多了一条插入记录类型为I.那么数据库表的任意改动我们都可以通过代码跟踪到。而且一个修改记录的即(sys_change_version)从创建开始,会在系统表里保存两天。

时间: 2024-08-10 12:15:17

查看sql修改痕迹(SQL Change Tracking on Table)的相关文章

JavaWeb 学习006-4个页面,5条sql语句(添加、查看、修改、删除)

今天遇到的问题: 1. 在list页面上添加信息时候,跳转到doAdd页面后,点击保存按钮,能够跳转回list页面,但是新增的信息不能显示出来,就像是没有执行添加操作一样. 这是什么问题? ①是不是到层面JDBC不能连接到数据库? 已验证不是这个原因 ②在addGrade.jsp 页面跳转页面代码直接写成了doListGrade.action,直接跳到list页面,很显然还没有执行调用添加操作,故而不能显示出要添加的信息 此问题已解决 ------------------------------

如何在sqlplus中查看、修改、执行缓存的SQL语句

在sqlplus中,如果没有上下翻页工具,sqlplus是不能向Linux终端一样上下翻历史命令的,但sqlplus会记录最近的一行DML语句到buffer中,我们可以使用一些简单的命令查看.修改.执行记录在buffer中的语句,如下: l[ist] [n] 查看buf中的SQL: del [n] 移除buf中的某行SQL: cl[ear] buff[er] 移除buf中语句: C[hange]/old_value/new_value 表示更改第一个出现的字符 : 此外,还有I和A,分别表示:

SQL基础:数据表的查看及修改

1. 查看表基本结构 可简写 DESC 表名: Null:是否可用存储Null值 Key:该列是否已编制索引.PRI表示该列是表主键的一部分:UNI表示该列是UNIQUE索引的一部分:MUL表示在列中某个给定值允许出现多次 Default:该列是否有默认值,为多少 Extra:获取与给定列有关的附件信息,如:属性值自增 2. 查看表详细结构 ------------------------------------------------- 1.修改表名 alter table (旧表名) ren

DeDeCMS后台批量修改替换sql语句大全

有时候后台文章内容.标题或者锚文本出错,需要修改批量修改,那么就需要用dedecms的sql语句进行批量修改了. 利用dedecms后台SQL命令行工具批量修改内容,路径和超链接等信息.语句 DEDECMS SQL命令批量替换1.更改文章中的内容update dede_addonarticle set body=replace(body,'原来的字符','替换后的字符')例子解释:update dede_addonarticle set body=replace(body,'软件下载','插件下

Oracle/SQL 修改字段类型和长度

标准SQL修改字段类型和长度语句:ALTER TABLE tableName modify column columnName 类型;例如Mysql的修改字段类型语句:alter table test modify column name varchar(255); Oracle修改字段类型和长度语句:ALTER TABLE tableName modify(columnName 类型);例如alter table test modify(name varchar(255)); Oracle/S

SQL修改字段默认值

一.SQL修改字段默认值 alter table 表名 drop constraint 约束名字 说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称 说明:添加一个表的字段的约束并指定默认值 go 例: alter table T_ping drop constraint DF_T_ping_p_c alter table T_ping add constraint DF_T_ping_p_c DEFAUL

sql修改字段长度

--sql修改字段长度的语法: ALTER TABLE 表名 MODIFY 字段名 字段类型; --sql修改字段长度的示例代码: ALTER TABLE qtline MODIFY qtl_bidernote VARCHAR(4000); --标准SQL,对任何数据库都适用: ALTER TABLE fzrtmis.reporttemplate MODIFY REPNAME VARCHAR(100); --修改字段名名称: ALTER TABLE TABLENAME RENAME COLUMN

查看msrepl_commands 中的SQL 语句

在Transactional Replication中,使用sys.sp_browsereplcmds 查看 msrepl_commands 中的SQL语句 sp_browsereplcmds Returns a result set in a readable version of the replicated commands stored in the distribution database, and is used as a diagnostic tool. This stored

SQL 修改数据库架构名

SQl 修改数据库架构名 declare @name sysname declare csr1 cursor for select TABLE_NAME from INFORMATION_SCHEMA.TABLES open csr1 FETCH NEXT FROM csr1 INTO @name while (@@FETCH_STATUS=0) BEGIN SET @name='cqgcfccn.' + @name print 'ALTER SCHEMA dbo TRANSFER ' + @n