基于另一列创建递增数字以形成两部分键
我在 SQL Server 数据库中有一个表。它在 Location(一个整数)和 CaseNumber(也是一个整数)上有一个由两部分组成的自然键。当我创建一条新记录时,我想指定位置并为我生成案例编号,以便对于任何一个位置,所有案例编号都是唯一的、递增的且没有间隙。表中的记录永远不会被删除。
确保并发更新安全的最佳方法是什么?
I have a table in a SQL Server database. It has a two-part natural key on Location (an integer) and CaseNumber (also an integer). When I create a new record I want to specify the Location and have the CaseNumber generated for me so that for any one location all Case Numbers are unique, incrementing and without gaps. Records in the table will never be deleted.
What would be the best way to do this ensuring that it is safe for concurrent updates?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这一点之前已经介绍过,但这里有一些一般性的想法:
添加一个涵盖
Location, CaseNumber
的UNIQUE INDEX
。如果并发检查失败,这将防止受骗。封装用于在事务中检查/插入新最大值的代码。它并不漂亮,但它可以确保不会出现并发问题。
IE..
This has been covered before, but here are some general ideas:
Add a
UNIQUE INDEX
coveringLocation, CaseNumber
. This will prevent dupes should your concurrency checks fail.Encapsulate your code for checking/inserting the new max value in a transaction. It's not pretty but its how you can insure there won't be issues with concurrency.
i.e...