通过序列的动态数字范围

Dynamic numberranges via sequence

提问人:Martin Bre 提问时间:6/3/2022 最后编辑:Martin Bre 更新时间:6/3/2022 访问量:36

问:

企业需要不同的数字范围,具体取决于他们想要添加的号码类型。我总是事先得到数字范围。

编号池

编号 名字 range_start range_end sequence_name
1 项目 0 1000 seq_items
2 公文 500 1500 seq_document
3 项目 1001 3000 seq_items2
4 项目 10000 11000 seq_items3

编号表

Number_Type more_metadata
项目 1
项目 2 酒吧
项目 ... bar[数字到3到999]
项目 1000 福斯
项目 5000 酒吧
公文 500 酒吧

我想使用标识或序列来规避冲突。我可以设置起始值和最大值,但如果它们用尽,我必须做出反应。

通过一个程序,我可以捕获“已达到其最小值或最大值”,如果我还剩下一个,请使用不同的序列。有没有更好的方法来避免竞争条件并且仍然具有动态数范围?

SQL-SERVER T-SQL 范围 序列

评论

0赞 Dale K 6/3/2022
这是一个非常烦人的要求 - 你最终会花费相当多的时间来维护这样的编号方案。如果你能得到允许你长时间继续生成数字的规则,那就更好了。
0赞 Martin Bre 6/3/2022
是的,你绝对是对的!我有一个接口来扩展数字,所以我不必自己做,但这仍然是一个愚蠢的要求。尽管如此,如果池用尽(并更改到下一个范围),如果有某种触发器可以触发,那将会有所帮助。
0赞 Dale K 6/3/2022
我认为您需要一个存储过程来分配下一个序列号,该序列号还会检查范围是否已耗尽并移动到新序列号。不幸的是,这意味着您必须一次分配一个,即您必须强制您的过程访问是串行的,但我可以想到 Jo 其他简单的方法来处理它。
0赞 Martin Bre 6/3/2022
如果我强制逐个调用该过程,我甚至不必使用序列,并且需要在服务端实现互斥锁。:\这就是我问是否有更好的方法的原因。
0赞 Dale K 6/3/2022
是的 - 我知道没有更好的方法了......要求不断更改范围不是正常用例。可以在 SQL Server 中执行等效互斥锁。

答: 暂无答案