D
dlnew
Unregistered / Unconfirmed
GUEST, unregistred user!
对不起,cxz9的答案不是最完美的!
他的答案用在单机上可以,不会出现麻烦。但用在网上就不行了,会出现跳号。
因为有时候一个号码产生了以后,有可能会放弃它。
当然,一般来说,跳号的现象客户是能接受的,只有在特殊情况下要考虑,下面是我的做法,
未经测试,请包涵:
1.建一个流水号表 lsh(id int, xh int),其中字段id是自增的;给一个初始数据(1,1)。
2.建一个存储过程:
create procedure get_lsh
@st int, --用来标记取号的状态,0表示取一个号码,其它数表示还一个号码
@hm char(11) output --用来存放号码,如果失败,则其值为'error'
as
declare @@tmp int,
@@i int
if @st = 0
begin
select @@i = id, @@tmp = xh from lsh where id = min(id)
if @@i = 1 then
update lsh set xh = xh + 1 where id = 1
else delete from lsh where id = @@i
set @hm = cast(year(getdate()) as char(4)) + cast(month(getdate()) as char(2))
+ cast(day(getdate()) as char(2))
@@i = 4 - len(ltrim(rtrim(cast(@@tmp as char)))
if @@i < 0 set @hm = 'error'
while @@i > 0
begin
set @hm = @hm + '0'
set @@i = @@i - 1
end
if @hm <> 'error' set @hm = @hm + ltrim(rtrim(cast(@@tmp as char))
end
else begin
if cast(@hm as int) = 0 set @hm = 'error'
else begin
set @tmp = cast(substring(@htm, 9, 4) as int)
if @tmp = 0 set @hm = 'error'
if @hm <> 'error'
begin
insert into lsh(xh) values(@tmp)
set @hm = '0'
end
end
end
当然,这样做也不能完全避免跳号,只是可以少跳许多。
他的答案用在单机上可以,不会出现麻烦。但用在网上就不行了,会出现跳号。
因为有时候一个号码产生了以后,有可能会放弃它。
当然,一般来说,跳号的现象客户是能接受的,只有在特殊情况下要考虑,下面是我的做法,
未经测试,请包涵:
1.建一个流水号表 lsh(id int, xh int),其中字段id是自增的;给一个初始数据(1,1)。
2.建一个存储过程:
create procedure get_lsh
@st int, --用来标记取号的状态,0表示取一个号码,其它数表示还一个号码
@hm char(11) output --用来存放号码,如果失败,则其值为'error'
as
declare @@tmp int,
@@i int
if @st = 0
begin
select @@i = id, @@tmp = xh from lsh where id = min(id)
if @@i = 1 then
update lsh set xh = xh + 1 where id = 1
else delete from lsh where id = @@i
set @hm = cast(year(getdate()) as char(4)) + cast(month(getdate()) as char(2))
+ cast(day(getdate()) as char(2))
@@i = 4 - len(ltrim(rtrim(cast(@@tmp as char)))
if @@i < 0 set @hm = 'error'
while @@i > 0
begin
set @hm = @hm + '0'
set @@i = @@i - 1
end
if @hm <> 'error' set @hm = @hm + ltrim(rtrim(cast(@@tmp as char))
end
else begin
if cast(@hm as int) = 0 set @hm = 'error'
else begin
set @tmp = cast(substring(@htm, 9, 4) as int)
if @tmp = 0 set @hm = 'error'
if @hm <> 'error'
begin
insert into lsh(xh) values(@tmp)
set @hm = '0'
end
end
end
当然,这样做也不能完全避免跳号,只是可以少跳许多。