每个外键 SQL 服务器的自动增量版本

Autoincrement version per Foreign Key SQL Server

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

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

我想添加一个record booklog table来存储实体的所有版本,命名为EntityLog

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

EntityLog的版本栏只是个草图,还不存在,可以随意操作

如何根据外键 EntityId 自动分配版本,以便插入自动将版本从 1 更新到 2,依此类推,每个 EntityId没有 table?

尽可能避免竞争条件,上下文包含一个多线程应用程序

编辑

尝试解决:

  1. 读取最高版本select max(version) from entityLog where entityId = myId
  2. 插入 EntityLog 之前读取的数字 + 1 或者如果它为 null
  3. 则简单地插入 1

1 和 2 之间可能存在竞争条件,因此我希望委托给 SQL 服务器一种线程安全的插入方式,像这样

您可以在 EntityLog 上使用普通标识列,当您想要按所述列显示版本号顺序并使用 ROWNUMBER() 函数作为版本时。