从特定的可用数字范围中获取下一个可用的号码

时间:2013-06-04 10:54:04

标签: sql oracle

在我的系统中,我必须为新客户提供下一个可用号码;此号码将用作帐号。如果特定帐号不再可用,有时我将不得不更改可用号码的范围。

所以..

表1包含客户及其帐号:

Customer1 | 210314
Customer2 | 210313
Customer3 | 210312

表2列出了可供选择的帐号范围:

StartNumber | 210300
EndNumber   | 210452

我希望能够选择下一个可用的数字(Max(accountnumber)+1),并检查它是否在表2中的数字序列范围内。在这种情况下,它将是210315,但如果我要更改表2中的数字系列,例如,

StartNumber | 220000
EndNumber   | 220999

然后它会将220001作为下一个可用数字。

有人能给我一个解决方案的例子,对于长篇描述感到抱歉:)

2 个答案:

答案 0 :(得分:0)

在table1上你可以添加一个自动递增1的Identity列,但是有一个Table2.StartNumber列的起始种子吗? 即。

Id int not null identity(2200, 1)

每次您在table1中输入一个值时,Id列将增加1,为您提供当前的工作值。您可以选择Max(Id)+ 1来获取下一个值。

每次重置数字范围时,您都可以重置身份种子。

create table test (
Id int not null identity(2200, 1), 
CustomerName nvarchar(100)
)

insert into test (CustomerName) values ('Customer1')
insert into test (CustomerName) values ('Customer2')
insert into test (CustomerName) values ('Customer3')

DBCC CHECKIDENT ('test', RESEED, 4500)

insert into test (CustomerName) values ('Customer4')
insert into test (CustomerName) values ('Customer5')
insert into test (CustomerName) values ('Customer6')

select * from test

产生结果:

Id      CustomerName
2200    Customer1
2201    Customer2
2202    Customer3
4501    Customer4
4502    Customer5
4503    Customer6

答案 1 :(得分:0)

假设StartNumber和EndNumber是Table2上的列,请尝试:

select greatest(min(m.max_acct)+1, min(r.StartNumber)+1) NextAccount
from (select max(AccountNumber) max_acct from Table1) m
join Table2 r on r.EndNumber >= m.max_acct+1