【问题标题】:T-SQL "timestamp" overwrites "rowversion" data type columnT-SQL“时间戳”覆盖“rowversion”数据类型列
【发布时间】:2013-02-21 08:22:26
【问题描述】:

我正在使用 Miscrosoft SQL Server 2012,因为在这个 article 中说:

不推荐使用时间戳语法。此功能将在 Microsoft SQL Server 的未来版本。避免在 新的开发工作,并计划修改当前的应用程序 使用此功能。

我决定使用“rowversion”列而不是“timestamp”列。所以,我创建了下表:

CREATE TABLE [dbo].[TestTable]
(
     [Col001] [INT] NOT NULL
    ,[Col002] [CHAR](2) NOT NULL
     ...
    ,[Col00N]  [DATETIME2] NOT NULL
    ,[RowVersionID] [ROWVERSION] NOT NULL
    ,CONSTRAINT [PK_ProtoSurveyGlobalizationChanges_RowVersionID] PRIMARY KEY CLUSTERED 
     (
        [RowVersionID] ASC
     )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY]

一切看起来都很好,直到我按下“ALT+F1”组合,它为我提供了有关我的表的信息(如列详细信息),并且我看到“RowVersionID”列被标记为“时间戳”类型。

我的下一个想法是使用 SQL Server Management Studio 2012“删除并创建我的表”,“生成的 SQL”改变了我的原始查询,如下所示:

[RowVersionID] [timestamp] NOT NULL

为什么服务器没有使用我最初设置的类型以及为什么在文章中建议我不要使用“时间戳”,但服务器却以某种方式选择了它?

【问题讨论】:

  • rowversion 是一个时间戳。它已被重命名,因为时间戳不符合 ISO 标准。将其保留为 rowversion 并停止担心。
  • 那么,如果我指定“rowversion”或“timestamp”,毕竟没有区别?服务器正在为我使用正确的服务器吗?
  • 只有一个符合。 timnestamp 已弃用,可能会在以后删除。
  • 这显然是 Smo 中的一个错误。它不应生成已弃用的数据类型。请使用 Connect 提交错误。 SQL Server Developer Tooling 的主要小组项目经理曾经是 Gert Drapers,尽管 LinkedIn 表示他现在在 Xbox Live 上工作。
  • @JohnZabroski 使用Connect?我不会在这上面浪费时间 :-) 您可以自己填写错误报告,并让我们知道何时/是否修复。

标签: tsql timestamp sql-server-2012 rowversion


【解决方案1】:

它们是同义词,服务器无法告诉(一旦创建表)您实际使用了哪个词来创建表。

显然,在深处的某个地方,timestamp 已被弃用的消息还没有传达给负责编写 SQL Server 脚本组件的人 - 所以脚本仍然是 timestamp

【讨论】:

  • +1 特别是。对于“在深处的某个地方,有消息......”:)
【解决方案2】:

rowversiontimestamp。它们是一样的。

timestamp 是 rowversion 数据类型的同义词,是主题 数据类型同义词的行为。在 DDL 语句中,使用 尽可能使用 rowversion 而不是 timestamp。

Ref.

它被重命名是因为timestamp 不符合 ISO 标准。并且因为人们错误地认为时间戳可以代表实际的日期时间点的可能性较小。

只需将其声明为rowversiontimestamp 已弃用,可能会在以后删除。

【讨论】:

  • 是的,我知道这一点,但我担心的是我正在使用“rowversion”,但似乎 SQL Server 不理解或指出,所以当“timestamp”时会发生什么“ 已移除。更重要的是,文章甚至建议重写使用“时间戳”的语句。
猜你喜欢
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 2018-06-24
  • 2012-02-17
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多