T-SQL“timestamp”会覆盖“rowversion”数据类型列

时间:2013-02-21 08:22:27

标签: tsql timestamp sql-server-2012 rowversion

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

  

不推荐使用时间戳语法。此功能将在a中删除   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”列标有“timestamp”类型。

接下来认为我已经完成了,是使用SQL Server Management Studio 2012“删除并创建我的表”,“生成的SQL”会更改我的原始查询,如下所示:

[RowVersionID] [timestamp] NOT NULL

为什么服务器没有使用我最初设置的类型,为什么在文章中我建议不要使用“timestamp”,但不知何故服务器正在选择它?

2 个答案:

答案 0 :(得分:10)

它们是同义词,服务器无法告诉(一旦创建了表格)您实际用于创建表格的单词。

显然,在深度深处,timestamp被弃用的消息尚未达到负责编写SQL Server脚本组件的人 - 所以脚本仍然会说timestamp

答案 1 :(得分:6)

rowversiontimestamp。他们是一回事。

  

timestamp是rowversion数据类型的同义词,也是主题   对数据类型同义词的行为。在DDL语句中,使用   尽可能使用rowversion代替时间戳。

Ref

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

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