代码
create table [order]
(
code varchar(50),
createtime datetime
)
--应用 usp_ordernumbergenerate(@prefix = 'PRC100701')
--传入前缀 大类+单据编码+6位日期
--获取当日该类单据最大流水号(需按日归零)
--此处判断有两种方法:一种是根据传入6位日期判断;另一种根据单据创建日期字段(前提:表有创建时间字段)
create procedure usp_OrderNumberGenerate
@prefix varchar(50)
as
declare @count int
declare @midcode varchar(3)
declare @Digits int = 3
declare @orderNumber varchar(50)
select @count = COUNT(*) from [order] where DATEDIFF(day, createtime, GETDATE()) = 0
if(@count = 0) --当日无单据情况 流水号为001
--print @count
select @orderNumber = @prefix + '001'
else --当日有单据情况 最大流水号+1
select @midcode = max(substring(midcode, 10, 3)) + 1
from [order]
where DATEDIFF(day, createtime, GETDATE()) = 0
select @orderNumber =@prefix + RIGHT(REPLICATE('0', @Digits)
+ CAST(@midcode as VARCHAR), @Digits)
print @ordernumber
(
code varchar(50),
createtime datetime
)
--应用 usp_ordernumbergenerate(@prefix = 'PRC100701')
--传入前缀 大类+单据编码+6位日期
--获取当日该类单据最大流水号(需按日归零)
--此处判断有两种方法:一种是根据传入6位日期判断;另一种根据单据创建日期字段(前提:表有创建时间字段)
create procedure usp_OrderNumberGenerate
@prefix varchar(50)
as
declare @count int
declare @midcode varchar(3)
declare @Digits int = 3
declare @orderNumber varchar(50)
select @count = COUNT(*) from [order] where DATEDIFF(day, createtime, GETDATE()) = 0
if(@count = 0) --当日无单据情况 流水号为001
--print @count
select @orderNumber = @prefix + '001'
else --当日有单据情况 最大流水号+1
select @midcode = max(substring(midcode, 10, 3)) + 1
from [order]
where DATEDIFF(day, createtime, GETDATE()) = 0
select @orderNumber =@prefix + RIGHT(REPLICATE('0', @Digits)
+ CAST(@midcode as VARCHAR), @Digits)
print @ordernumber
posted @ 2010-07-01 17:24 彭杰斌 阅读(61) 评论(0) 编辑
代码
1 declare @a int
2 set @a = 0
3 while @a < 100
4 begin
5 insert into test ( midcode )
6 select top 1
7 substring(convert(varchar(36), newid()), 1, 3) as midcode-- into test
8 from sys.objects
9 print @a
10 set @a = @a + 1
11 end
12
13
14 select midcode,
15 COUNT(midcode)
16 from test
17 group by midcode
18 having COUNT(midcode) > 1
19 order by COUNT(midcode) desc
20
2 set @a = 0
3 while @a < 100
4 begin
5 insert into test ( midcode )
6 select top 1
7 substring(convert(varchar(36), newid()), 1, 3) as midcode-- into test
8 from sys.objects
9 print @a
10 set @a = @a + 1
11 end
12
13
14 select midcode,
15 COUNT(midcode)
16 from test
17 group by midcode
18 having COUNT(midcode) > 1
19 order by COUNT(midcode) desc
20
结果,随循环数的增大重复几率增大。无太大实际应用意义,本打算放在一个小系统作流水替代号的。
posted @ 2010-07-01 15:17 彭杰斌 阅读(69) 评论(2) 编辑
