2013-02-21 122 views
5

我使用Miscrosoft SQL Server 2012中和,因为在这种article说:T-SQL “时间戳” 覆盖 “rowversion” 数据类型列

时间戳语法已被弃用。此功能将在 未来版本的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 

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

+0

rowversion是一个时间戳。它已重新命名,因为时间戳不符合ISO标准。把它作为排队并停止担心它。 – 2013-02-21 08:26:03

+0

那么,如果我指定“rowversion”或“timestamp”,那么最终没有区别?服务器正在为我使用正确的吗? – gotqn 2013-02-21 08:27:13

+0

只有一个符合。 timnestamp已被弃用,并可能在稍后的日期被删除。 – 2013-02-21 08:27:53

回答

9

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

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

+3

+1 esp。对于“深处的某个地方,这个消息......”:) – 2013-02-21 08:29:53

5

rowversiontimestamp。他们是一样的东西。

timestamp是rowversion数据类型的同义词,并且 是数据类型同义词的行为。在DDL语句中,尽可能使用 rowversion而不是时间戳。

Ref

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

只需将其保留为rowversion即可。 timestamp已被弃用,并可能在以后的日期被删除。

+1

是的,我意识到这一点,但我担心的是我使用“rowversion”,但似乎SQL Server不理解或表示,所以当“时间戳”被删除时会发生什么。更重要的是,文章甚至建议重写使用“timestamp”的语句。 – gotqn 2013-02-21 08:32:06

+0

你正在担心一个不存在的问题。继续.... – 2013-02-21 08:32:47