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

got*_*tqn 7 t-sql timestamp rowversion sql-server-2012

我正在使用Miscrosoft SQL Server 2012,因为在这篇文章中说:

不推荐使用时间戳语法.将在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]
Run Code Online (Sandbox Code Playgroud)

一切都很好看,直到我按下"ALT + F1"组合,给我关于我的表的信息(比如列详情),我看到"RowVersionID"列标有"timestamp"类型.

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

[RowVersionID] [timestamp] NOT NULL
Run Code Online (Sandbox Code Playgroud)

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

Dam*_*ver 10

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

显然,在深度深处的某个地方,timestamp被弃用的新闻还没有达到负责编写SQL Server脚本组件的人 - 所以脚本仍然说timestamp.

  • +1 esp.因为"深处某处,新闻......":) (3认同)

Mit*_*eat 6

rowversion是一个timestamp.他们是一样的东西.

timestamp是rowversion数据类型的同义词,受数据类型同义词行为的影响.在DDL语句中,尽可能使用rowversion而不是timestamp.

参考.

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

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