我们有一个表来存储记录的版本。
这些列是:
Id (Guid)
VersionNumber (int)
Title (nvarchar)
Description (nvarchar)
etc...
保存项目将在表中插入具有相同 ID 和增量版本号的新行。
我不确定如何最好地生成顺序 VersionNumber 值。我最初的想法是:
SELECT @NewVersionNumber = MAX(VersionNumber) + 1
FROM VersionTable
WHERE Id = @ObjectId
然后在我的插入语句中使用@NewVersionNumber。
如果我使用此方法,是否需要将事务设置为可序列化以避免并发问题?我不想最终得到相同 ID 的重复版本号。
有没有更好的方法来做到这一点,而不会让我使用可序列化事务?
为了避免并发问题(或者在您的特定情况下重复插入),您可以创建一个复合键作为表的主键,由 ID 和 VersionNumber 列组成。然后,这将对键列强制执行唯一约束。
随后,可以设计您的插入例程/逻辑来处理或更确切地说捕获由于重复键而导致的插入错误,然后简单地重新发出插入过程。
还值得一提的是,除非您特别需要使用 GUID,即因为使用 SQL Server 复制或多个数据源,否则您应该考虑使用替代数据类型,例如 BIGINT。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)