7

我正在使用 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

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

4

2 回答 2

10

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

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

于 2013-02-21T08:27:54.753 回答
6

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

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

参考

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

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

于 2013-02-21T08:28:58.930 回答