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



我使用的是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]

一切看起来都很好,直到我按下了"ALT+F1"组合,它给了我关于我的表的信息(比如列的详细信息),我看到"RowVersionID"列用类型"timestamp"标记。

我所做的下一个想法是使用SQL Server Management Studio 2012"删除并创建我的表","生成的SQL"将我原来的查询更改为:

[RowVersionID] [timestamp] NOT NULL

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

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

显然,在深层次的某个地方,timestamp被弃用的消息还没有传到负责编写SQL Server脚本组件的人那里——所以脚本仍然说timestamp

rowversiontimestamp。它们是一样的东西。

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

参考。

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

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

最新更新