3

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

4

1 回答 1

3

随意将脚本更改为 showROWVERSION而不是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

所以我真的不认为你(或任何人)可以做任何事情来更好地为未来的版本做好准备 - 微软将有很多客户和你在同一条船上,这可能就是你实际上没有的原因看到了快速驱逐的类型。他们可能仍在提出真正消除它的计划(而且他们在选择名称方面做得更好,DATETIME2恕我直言除外)。

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

于 2012-04-27T13:03:55.253 回答