更改跟踪删除与插入和更新
Change Tracking Delete vs Insert and Update
我正在开发一个集中记录所有数据操作操作的系统。
目前已应用 SQL Server Change Tracking,但它跟踪的数据存在问题。
例如。如果我在 TableX 中插入一行,更新同一行然后删除它,似乎只记录了删除操作。有谁知道怎么查看之前的操作吗?
DECLARE
@synchronization_version bigint,
@last_synchronization_version bigint;;
-- Obtain the current synchronization version. This will be used next time that changes are obtained.
SET @synchronization_version = CHANGE_TRACKING_CURRENT_VERSION();
-- Obtain initial data set.
SELECT T.*
FROM TableX AS T;
SELECT DTC.commit_time, CT.*, T.*
FROM TableX AS T
RIGHT OUTER JOIN CHANGETABLE(CHANGES TableX, @last_synchronization_version) AS CT ON T.fldId = CT.fldId
JOIN sys.dm_tran_commit_table DTC ON CT.sys_change_version = DTC.commit_ts;
正如@AlwaysLearning 所指出的那样,解决方案是使用变更数据捕获 (CDC) (Microsoft Docs) 而不是变更跟踪 (CT)。
我正在开发一个集中记录所有数据操作操作的系统。 目前已应用 SQL Server Change Tracking,但它跟踪的数据存在问题。 例如。如果我在 TableX 中插入一行,更新同一行然后删除它,似乎只记录了删除操作。有谁知道怎么查看之前的操作吗?
DECLARE
@synchronization_version bigint,
@last_synchronization_version bigint;;
-- Obtain the current synchronization version. This will be used next time that changes are obtained.
SET @synchronization_version = CHANGE_TRACKING_CURRENT_VERSION();
-- Obtain initial data set.
SELECT T.*
FROM TableX AS T;
SELECT DTC.commit_time, CT.*, T.*
FROM TableX AS T
RIGHT OUTER JOIN CHANGETABLE(CHANGES TableX, @last_synchronization_version) AS CT ON T.fldId = CT.fldId
JOIN sys.dm_tran_commit_table DTC ON CT.sys_change_version = DTC.commit_ts;
正如@AlwaysLearning 所指出的那样,解决方案是使用变更数据捕获 (CDC) (Microsoft Docs) 而不是变更跟踪 (CT)。