将timestamp数据类型更改为rowversion

时间:2012-04-27 10:52:31

标签: sql-server sql-server-2008 tsql

我不确定是否有必要。我有一个sql server 2008数据库,其中所有表都有一个时间戳列。是否最好将timestamp数据类型更改为rowversion,以便可以轻松升级到将来的sql server版本?如果是这样,在不重新创建表的情况下将所有时间戳列更改为rowversion的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以随意更改脚本以显示ROWVERSION而不是TIMESTAMP,但尝试对表格进行任何更改都没有意义。即使在SQL Server 2012中,虽然他们早已发誓要消除令人困惑的名称,即使你创建了这样一个表:

USE tempdb;
GO
CREATE TABLE dbo.foo
(
  bar INT,
  rv ROWVERSION
);

目录视图和内部的所有其他内容仍然将其视为TIMESTAMP:

SELECT c.name, [type] = TYPE_NAME(c.system_type_id)
  FROM sys.columns AS c
  WHERE [object_id] = OBJECT_ID('dbo.foo');

结果:

name type
---- ---------
foo  int
rv   timestamp

因此,我并不认为您(或任何人)可以做些什么来更好地为未来的版本做好准备 - 微软将在同一条船上拥有 LOT 的客户就像你一样,这可能就是为什么你还没有真正看到这种类型的快速驱逐。他们可能仍然想出真正消除它的计划(除了DATETIME2恕我直言外,他们在选择名字方面要好得多。

我最好的建议是确保您的脚本和对象都使用ROWVERSION,这样您就不会感到意外。这可能意味着手动编辑您从Management Studio,目录视图甚至第三方工具生成的脚本。