0

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

所以..

表 1 包含客户及其帐号:

Customer1 | 210314
Customer2 | 210313
Customer3 | 210312

表 2 包含可供选择的帐号范围:

StartNumber | 210300
EndNumber   | 210452

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

StartNumber | 220000
EndNumber   | 220999

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

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

4

2 回答 2

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
于 2013-06-04T11:17:39.983 回答
0

在 table1 上,您是否可以添加一个自动递增 1 的 Identity 列,但具有 Table2.StartNumber 列的起始种子?IE

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
于 2013-06-04T11:11:09.143 回答