首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理/生成保单编号的最佳实践

管理/生成保单编号的最佳实践
EN

Stack Overflow用户
提问于 2010-10-19 22:14:44
回答 7查看 232关注 0票数 0

我目前在一个网站上工作,允许潜在客户生成报价和购买保单。在他们提交付款后,应用程序应生成保单编号。

我得到了一组保单号码,可以逐步使用。对于这个例子,我们假设是0100800 - 0100999。如果我有两个或更多的人同时决定购买一份保单,有哪些最佳实践/算法可以确保我不会为两个或更多的人生成相同的保单编号?

也有可能在最后一个可用保单编号0100999之后,我可能会得到另一个保单编号块,例如0222100-0222399。

EN

回答 7

Stack Overflow用户

发布于 2010-10-19 22:18:59

我想你是用数据库来存储这些信息吧?如果这是正确的(假设您使用的是SQL Server),则可以指定一列作为identity列。

一旦你指定它是一个身份,你可以给它一个:

种子

是用于加载到表中的第一行的值。

在你的情况下应该是100800。您可以在从数据库中拉出零之后将其放在前面。

这样做的一个好处是,您不必担心两个人同时创建具有相同保单编号的保单。

票数 2
EN

Stack Overflow用户

发布于 2010-10-19 22:18:55

假设您不打算在用完时返回到起始编号(在本例中为0100800),那么您可以使用SQL Server标识列,并将其作为起始预定义值的种子,并按1递增。

我对此并不乐观,但我认为你可以在Oracle中使用序列来完成完全相同的事情,我不确定的是,你是否可以从一个预定义的数字开始一个序列。

票数 1
EN

Stack Overflow用户

发布于 2010-10-19 22:19:09

最好的想法是在数据库中执行这一部分,因为在那里您可以通过事务来保护自己。

代码语言:javascript
复制
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION

DECLARE @LastPolicyNr int
SELECT LastPolicyNr = MAX(PolicyNr) FROM [Policy]

DECLARE @NewPolicyNr int
SET @NewPolicyNr = @LastPolicyNr + 1

INSERT INTO [Policy] ([PolicyNr], ...)
VALUES (@NewPolicyNr, ...)

COMMIT TRANSACTION
END TRANSACTION

RETURN @NewPolicyNr
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3969286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档