【发布时间】:2020-11-12 08:55:53
【问题描述】:
我的表需要一个唯一的编号 ID。通常我会在 Sql Server 中使用 Identity,但我的用例有一个问题。我想在创建行之前知道 id(以便能够在将所有内容提交到数据库之前在内存中的其他记录中引用它)。
我不知道是否可以通过 Identity 实现,但我想不通。
所以我的下一个最佳猜测是我需要一个表来存储一个值并不断增加它并返回一个新的 id 值。必须锁定访问权限,这样两个操作才能获得相同的值。
我正在考虑使用例如sp_getapplock @Resource = 'MyUniqueId' 以防止将相同的号码返回给呼叫者。也许我也可以在事务中使用普通锁定。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
您可以使用 SEQUENCE 从服务器检索新的唯一值。你不需要显式锁
-
是的,看起来正是我需要的,它保证唯一性吗?
-
确实如此 - 即使回滚事务也不会重置 SEQUENCE。另一方面,如果您明确重置它,它将再次开始产生相同的值。这与重新播种 IDENTITY 没有什么不同
-
我希望我可以避免重置它:)
标签: sql sql-server uniqueidentifier unique-id