joh*_* Gu 4 sql-server-2008 sql-server sql-server-2008-r2
微软在这里提到我们应该使用 rowversion 数据类型而不是 Timestamps。现在在我的 SQL Server 2008 R2 中,我想创建一个具有 Rowversion 数据类型的列。但是在我的 SQL Server 2008 R2 Management Studio 中,我找不到这样的数据类型:

此外,当我尝试使用此语句更改名为时间戳的现有列时,该列的类型为时间戳:
ALTER TABLE [SkillManagement].[dbo].[Customer]
ALTER COLUMN timestamp rowversion
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Msg 4927, Level 16, State 1, Line 1
Cannot alter column 'timestamp' to be data type timestamp
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议吗?
编辑

Aar*_*and 22
rowversion只是 的别名timestamp。在封面下,它们是完全相同的东西。
如果您使用的是 GUI(2012 年之前),则必须使用timestamp. (外围提示:请停止使用 GUI。)
但它并不止于此。即使您使用 DDL 生成此表:
CREATE TABLE dbo.x(y ROWVERSION);
Run Code Online (Sandbox Code Playgroud)
元数据中的数据类型将是timestamp:
SELECT t.name
FROM sys.types AS t
INNER JOIN sys.columns AS c
ON c.system_type_id = t.system_type_id
INNER JOIN sys.tables AS st
ON c.[object_id] = st.[object_id]
INNER JOIN sys.schemas AS s
ON st.[schema_id] = s.[schema_id]
WHERE st.name = N'x'
AND s.name = N'dbo'
AND c.name = N'y';
Run Code Online (Sandbox Code Playgroud)
如果您为此表生成脚本,它还将包括timestamp:
CREATE TABLE [dbo].[x](
[y] [timestamp] NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
事实上:
SELECT * FROM sys.types WHERE name = N'rowversion';
Run Code Online (Sandbox Code Playgroud)
结果:
----
0 row(s) affected.
Run Code Online (Sandbox Code Playgroud)
因此,系统中甚至没有一个名为的类型rowversion- 任何包含它的 DDL 在 DDL 甚至在针对服务器执行之前都会被解析和转换。
自从 Microsoft 首次引入名称不佳的数据类型(这也恰好违反了 SQL 标准,该标准规定该timestamp数据类型应用于日期/时间数据)以来,Microsoft 一直对此存在矛盾。我在 2007 年要求适当弃用此功能。我的连接项目仍然有效 (存档) - 随意投票,更重要的是,评论文档如何与产品的可能用途相矛盾。
| 归档时间: |
|
| 查看次数: |
21903 次 |
| 最近记录: |