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

Posted

技术标签:

【中文标题】通过在 ms-sql 中的表中添加一个名为 recordversion 的时间戳列,我可以获得啥?【英文标题】:What do I gain by adding a timestamp column called recordversion to a table in ms-sql?通过在 ms-sql 中的表中添加一个名为 recordversion 的时间戳列,我可以获得什么? 【发布时间】:2010-09-23 08:34:43 【问题描述】:

向 ms-sql 中的表添加一个名为 recordversion 的时间戳列有什么好处?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

对于完整的审计跟踪,表上的触发器是要走的路【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我不知道,或者 Google 似乎很快就能找到。

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

是的,但列名没有什么特别之处。通过使用该名称命名列,您不会自动获得任何信息。 还有一条评论...ms-sql 中的时间戳列看起来不像日期/时间值。对于以前没有使用过它们的人来说,这通常会让他们感到惊讶。

以上是关于通过在 ms-sql 中的表中添加一个名为 recordversion 的时间戳列,我可以获得啥?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Microsoft SQL 2000+ 中的表中添加描述/注释

MySQL - 向左连接添加子句

如何增加(更新)SQL 表中的单元格?在查询中

如何从 SQL Server 中的表中删除重复行 [重复]

多表操作

如何在 MySQL 表中添加外键列?