每个外键SQL Server的自动增量版本

时间:2018-09-18 08:54:29

标签: sql-server multithreading foreign-keys primary-key composite-primary-key

我有一个名为Entity的实体表,如下所示:

Entity
---------------------------
id (uniqueidentifier)
name (varchar(32))
description (varchar(max))

我想添加一个record booklog表来存储名为EntityLog的Entity的所有版本

EntityLog
-------------------------
version ???
entityId (uniqueidentifier) fk Entity
name (varchar(32))
description (varchar(max))

EntityLog的version列只是一个草图,可以使用它,因为它尚不存在。

我如何基于外键EntityId自动分配版本,以便插入文件自动按EntityId从每个表将版本从1更新为2,依此类推?

为避免竞争情况,上下文包括多线程应用程序

编辑

尝试解决它:

  1. 阅读最高版本select max(version) from entityLog where entityId = myId
  2. 将先前读取的数字+ 1插入EntityLog,如果为空则插入1。

在1和2之间可能存在竞争条件,因此我希望将这样的线程安全插入方式委派给SQL Server

1 个答案:

答案 0 :(得分:1)

您可以在EntityLog上使用普通身份列,并在要通过该列显示版本号顺序时使用ROWNUMBER()函数作为版本。