我们不允许使用 CDC。
我们需要报告对表格所做的更改,格式如下:
在 [This Date],用户 [UserName] 将字段 [FieldName] 从 [OldValue] 更改为 [New Value]
我的想法是在表上使用更新/插入触发器,将其称为 TableA,然后将该行写入一个新的 TableA_Tracking 表,该表具有相同的列,以及源表的外键。
TableA 有'LastUpdatedByUserId'
一个'LastUpdateDate'
列。
用触发器存储数据是可以的。但是,我想知道是否有一种有效的方法来取回数据,以便我可以将其报告回应用程序。
有没有我可以遵循的模式将数据提取为表格格式,并将其返回到 UI 进行格式化?
我在想,大概是这样的:
WITH Track_CTE (
Placement_TrackID,
PlacementId,
PlacementEventId,
CarerId,
FosterCareAllowanceFlag,
InterstateAllowanceAmount,
FosterCareAllowanceReason,
FosterCareAllowanceDate,
InterstateAllowanceFlag,
LastUpdateUser,
LastUpdateDate
)
AS
(
SELECT
Placement_TrackID,
PlacementId,
PlacementEventId,
CarerId,
FosterCareAllowanceFlag,
InterstateAllowanceAmount,
FosterCareAllowanceReason,
FosterCareAllowanceDate,
InterstateAllowanceFlag,
LastUpdateUser,
LastUpdateDate
FROM
[Placement_Track]
)
SELECT *
FROM Track_CTE c1
LEFT JOIN Track_CTE c2
ON c2.Placement_TrackID = c1.Placement_TrackID - 1
其中 Placement_Track 是一个表,它是源表的直接副本,PK(第一列)除外。该表由更新和插入触发器写入。
然后有一行更新版本和以前的版本......从那里,也许可以解决这些变化?但是,我可能偏离了轨道。
在上面的示例中,我将在 PlacementId 上进行过滤,因为那是源表的 PK,因此选择会受到更多限制。此外,在此示例中,我跟踪的唯一列是 FosterCareAllowanceFlag、InterstateAllowanceAmount、FosterCareAllowanceReason、FosterCareAllowanceDate 和 InterstateAllowanceFlag。