代码
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, 103)) + 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()), 13as 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) 编辑