【发布时间】:2013-02-21 08:22:26
【问题描述】:
我正在使用 Miscrosoft SQL Server 2012,因为在这个 article 中说:
不推荐使用时间戳语法。此功能将在 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”列被标记为“时间戳”类型。
我的下一个想法是使用 SQL Server Management Studio 2012“删除并创建我的表”,“生成的 SQL”改变了我的原始查询,如下所示:
[RowVersionID] [timestamp] NOT NULL
为什么服务器没有使用我最初设置的类型以及为什么在文章中建议我不要使用“时间戳”,但服务器却以某种方式选择了它?
【问题讨论】:
-
rowversion 是一个时间戳。它已被重命名,因为时间戳不符合 ISO 标准。将其保留为 rowversion 并停止担心。
-
那么,如果我指定“rowversion”或“timestamp”,毕竟没有区别?服务器正在为我使用正确的服务器吗?
-
只有一个符合。 timnestamp 已弃用,可能会在以后删除。
-
这显然是 Smo 中的一个错误。它不应生成已弃用的数据类型。请使用 Connect 提交错误。 SQL Server Developer Tooling 的主要小组项目经理曾经是 Gert Drapers,尽管 LinkedIn 表示他现在在 Xbox Live 上工作。
-
@JohnZabroski 使用
Connect?我不会在这上面浪费时间 :-) 您可以自己填写错误报告,并让我们知道何时/是否修复。
标签: tsql timestamp sql-server-2012 rowversion