与PostgreSQL相同的timestamp / rowversion(SQL Server)是什么

时间:2009-11-14 18:30:09

标签: sql nhibernate postgresql mono

有人可以帮我找到与PostgreSQL等效的Timestamp / Rowversion(SQL Server)吗?

我在Mono上使用NHibernate(UNIX)。

我认为Timestamp(PostgreSQL)相当于Datetime(SQL Server) - 它不是我想要的

编辑1:对于那些不知道SQL Server中什么是Timestamp / Rowversion的人:http://msdn.microsoft.com/en-us/library/ms182776.aspx(它主要用于乐观并发)

4 个答案:

答案 0 :(得分:4)

请参阅PostgreSQL文档中的system columns部分。特别是,xmin可能正是您所寻找的。

但要小心使用任何系统列。根据定义,它们是特定于实现的,其中一些细节可能会随着未来版本而改变。

答案 1 :(得分:0)

如果我理解正确rowversion与serial相同?如果不是 - 你必须使用触发器制作自己的。

答案 2 :(得分:0)

您可以手动创建:

  1. 创建序列
  2. 为包含rowversion列的每个表创建插入和更新的触发器
  3. 从序列
  4. 设置rowversion列

答案 3 :(得分:0)

遗漏的关键是每次更新行时都会更改行版本类型,即使最终结果是行也不会更改。

CREATE TABLE MyTest (myKey int PRIMARY KEY  
    ,myValue int, RV rowversion);  
GO   
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0);  
GO   
INSERT INTO MyTest (myKey, myValue) VALUES (2, 0);  
GO  

select * from MyTest
Go

update MyTest set myValue = 0 
go

/* row version will have changed */
select * from MyTest
Go

我发现的唯一选择是创建一个更新触发器。