1

通过在 ms-sql 中的表中添加一个名为 recordversion 的时间戳列,我可以获得什么?

4

4 回答 4

5

您可以使用该列来确保您的用户不会覆盖其他用户的数据。

假设用户 A 拉起记录 1,同时用户 B 拉起记录 1。用户 A 编辑记录并保存它。5 分钟后,用户 B 编辑记录 - 但不知道用户 A 的更改。当他保存他的更改时,您在 update where 子句中使用 recordversion 列,这将防止用户 B 覆盖用户 A 所做的事情。您可以检测到这种无效条件并抛出某种数据过期错误。

于 2008-11-20T22:45:12.310 回答
1

没有什么我知道的,或者谷歌似乎很快就能找到。

通过使用该名称作为列,您不会获得任何固有的东西。当然,您可以创建一个列并按照下一个响应中的说明进行记录版本控制,但列名没有什么特别之处。您可以随意调用该列并进行版本控制,并且您可以调用任何列 RecordVersion 并且不会发生任何特殊情况。

于 2008-11-20T22:44:32.640 回答
1

另外,请记住,如果您想跟踪数据,最好将这四列添加到每个表中:

CreatedBy(varchar) | CreatedOn(date) | ModifiedBy(varchar) | ModifiedOn(date)

虽然它不会为您提供完整的历史记录,但它可以让您知道创建条目的人员和时间,以及上次修改条目的人员和时间。这 4 列创建了非常强大的跟踪能力,而不会给您的数据库带来任何严重的开销。

显然,您可以创建一个完整的日志记录系统来跟踪每个更改并为您提供完整的历史记录,但这不是我认为您提出的问题的解决方案。

于 2008-11-20T23:15:52.013 回答
1

时间戳主要用于复制。我还成功地使用它来确定自上次向客户端提要以来数据是否已更新(当我需要发送增量提要时),因此仅挑选出自那时以来已更改的记录。这确实需要在您运行报告时使用另一个表来存储时间戳的值(在 varbinary 字段中),以便您可以在下次运行时使用它进行比较。

如果您认为时间戳记录了上次更新的日期或时间,它不会这样做,您需要 dateTime 字段和约束(获取原始日期时间)和触发器(更新)来存储该信息。

于 2008-11-25T18:56:51.163 回答