Tsql T-SQL";时间戳;覆盖“;rowversion";数据类型列

Tsql T-SQL";时间戳;覆盖“;rowversion";数据类型列,tsql,timestamp,sql-server-2012,rowversion,Tsql,Timestamp,Sql Server 2012,Rowversion,我使用的是Mistrosoft SQL Server 2012,因为在本文中: 不推荐使用时间戳语法。此功能将在以后的操作中删除 Microsoft SQL Server的未来版本。避免在中使用此功能 新的开发工作,并计划修改当前 使用此功能 我决定使用“rowversion”列而不是“timestamp”列。因此,我创建了下表: CREATE TABLE [dbo].[TestTable] ( [Col001] [INT] NOT NULL ,[Col002] [CHAR](

我使用的是Mistrosoft 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
rowversion
timestamp
。它们是一样的

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

它被重命名是因为
时间戳
不符合ISO标准。因为人们很少会错误地认为时间戳可以代表实际的日期时间点


只需将其声明为
rowversion
<代码>时间戳已弃用,可能会在以后删除

rowversion是一个时间戳。它被重命名,因为时间戳不符合ISO标准。所以,如果我指定了“rowversion”或“timestamp”,那就没有什么区别了?服务器正在为我使用正确的?只有一个。timnestamp已被弃用,可能稍后会被删除。这显然是Smo中的一个bug。它不应生成不推荐使用的数据类型。请使用Connect提交错误。SQL Server开发者工具的主要组程序经理过去是Gert Drapers,尽管LinkedIn说他现在在Xbox Live上工作。@JohnZabroski使用
Connect
?我不会浪费时间:-)你可以自己填写错误报告,并让我们知道何时/是否已修复。+1特别是对于“深处的某个地方,关于…”的新闻:)是的,我知道,但我担心的是我正在使用“rowversion”,但SQL Server似乎不理解或表示,那么当“时间戳”被移除时会发生什么呢。此外,文章甚至建议重写使用“时间戳”的语句。