我有一个简单的问题。如何跟踪 SQL Server 表中行的更改?这是我想要的一个例子。
Table: Users
Columns: 姓名 |地址 |用户名 |用户类型
Row 1:克里斯托弗| 123假街|情人1234 | 1
我如何跟踪用户将“Christopher”更改为“Robert”的时间,或者是否将“123 Fake Street”更改为“124 Fake Street”。我需要知道更改的时间以及更改的旧值。我还希望能够跟踪 UserType 是否更改(这是外键),因此我需要知道如何跟踪外键更改。
这可能发生在多个不同的表中,我想跟踪多个不同的表。
有不同的选择可以做到这一点。我会提到两个:
选项1:
将名为 IsHistory 的列添加到表中。你最终会得到这样的结果:
Name | Address | Username | UserType | IsHistory
------------+-----------------+-----------+----------+----------
Christopher | 123 Fake Street | Lover1234 | 1 | 0
然后,当您更新记录时,将旧记录上的 IsHistory 值更改为 1,然后添加包含更新信息的新记录,并将 IsHistory 记录更改为 0。您最终会得到如下结果:
Name | Address | Username | UserType | IsHistory
------------+-----------------+-----------+----------+----------
Christopher | 123 Fake Street | Lover1234 | 1 | 1
Robert | 123 Fake Street | Lover1234 | 1 | 0
选项2:
添加一个日志表,其中可以包含以下内容:
LogID | Entity | ActionType | Description | OldDataXML
然后,每次发生更新时,都在此处插入一条记录。
- LogID是PK
- 实体是受更新影响的表
- 操作类型是对实体采取的操作(插入、更新、删除)
- 描述是解释更改的简短文本
- OldDataXML 是 XML 更改之前记录上的数据。
例如:
<User Name="Christopher"
Address="123 Fake Street"
Username="Lover1234"
UserType="1">
</User>
在此选项中,用户表中的记录将始终是最新的,并且在日志表中您将获得更改的信息。
希望这可以帮到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)