Microsoft建议我们使用rowversion
而不是timestamp
。
https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017
但是,我看不到该怎么做。
参考的T-SQL文档说:
如果未指定列名,则SQL Server数据库引擎将生成时间戳列名;但是,rowversion同义词不遵循此行为。使用rowversion时,必须指定列名,例如:
CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;
但是,当我使用此代码生成表时,SSMS中的列显示为:
Colum Name: VerCol
Data type: timestamp
是否可以在SQL Server中使用rowversion
?
答案 0 :(得分:1)
不建议使用timestamp
语法,即按列的类型指定列而不指定其名称。在下面,它仍然是timestamp
,键入id = 189;尝试select * from sys.types where system_type_id = 189
。 rowversion
关键字仅用于区分两者。这些是等效的:
CREATE TABLE a (id INT PRIMARY KEY IDENTITY(1, 1), VerCol timestamp)
CREATE TABLE b (id INT PRIMARY KEY IDENTITY(1, 1), VerCol rowversion)
这两个表的外观和行为完全相同。尝试
SELECT * FROM sys.columns WHERE object_id in (OBJECT_ID('dbo.a'), OBJECT_ID('dbo.b'))
您将看到两个VerCol
列都具有相同的system_type_id
。如果您尝试:
INSERT INTO a DEFAULT VALUES
INSERT INTO b DEFAULT VALUES
SELECT * FROM a
SELECT * FROM b
您会得到类似的东西:
id VerCol ----------- ------------------ 1 0x00000000000007D3 (1 row affected) id VerCol ----------- ------------------ 1 0x00000000000007D4 (1 row affected)
对于您的数据库,VerCol值当然会有所不同。