在我的系统中,我必须为新客户提供下一个可用号码;此号码将用作帐号。如果特定帐号不再可用,有时我将不得不更改可用号码的范围。
所以..
表1包含客户及其帐号:
Customer1 | 210314
Customer2 | 210313
Customer3 | 210312
表2列出了可供选择的帐号范围:
StartNumber | 210300
EndNumber | 210452
我希望能够选择下一个可用的数字(Max(accountnumber)+1)
,并检查它是否在表2中的数字序列范围内。在这种情况下,它将是210315,但如果我要更改表2中的数字系列,例如,
StartNumber | 220000
EndNumber | 220999
然后它会将220001作为下一个可用数字。
有人能给我一个解决方案的例子,对于长篇描述感到抱歉:)
答案 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