zoukankan      html  css  js  c++  java
  • SQLServer根据不同前缀生成多套流水号

      1 --种子表
      2 --@prefix 前缀
      3 --@seed 种子值
      4 create table RefNoSeed(
      5     prefix char(4) unique,
      6     seed int
      7 )
      8 go
      9 
     10 --测试表
     11 --@insertTime 插入时间(仅测试用途)
     12 --@RefNo 流水号
     13 create table RefNoTable(
     14     insertTime datetime unique,
     15     RefNo varchar(20) unique
     16 )
     17 go
     18 
     19 if OBJECT_ID('F_FormattingSerialNumber','FN') is not null
     20     drop function dbo.F_FormattingSerialNumber
     21 go
     22 --格式化数值,用于把种子数值转换为10个字符长度的字符串,不足位数前面添加0
     23 --@sn 种子值
     24 --returns 10个字符长度字符串
     25 create function dbo.F_FormattingSerialNumber(@sn int)
     26     returns varchar(10)
     27 begin
     28     return cast(replicate('0',10-len(cast(@sn as varchar(10)))) + cast(@sn as varchar(10)) as varchar(10))
     29 end
     30 go
     31 
     32 if OBJECT_ID('P_GenerateRefNo','P') is not null
     33     drop proc dbo.P_GenerateRefNo
     34 go
     35 --获取前缀,生成流水号
     36 --@prefix 前缀
     37 --@timeNow 时间(仅测试用途)
     38 create proc dbo.P_GenerateRefNo
     39     @prefix varchar(20),
     40     @timeNow datetime
     41 as
     42     begin try
     43         --开启事务
     44         begin tran
     45             set nocount on;
     46             declare @newSeed int
     47             --根据前缀获取现在的种子值并+1为新种子值
     48             set @newSeed=(select seed from RefNoSeed where prefix=@prefix)+1
     49             --若不存在种子值,则按照前缀添加种子值,并把新种子值设置为1
     50             if @newSeed is null
     51                 begin
     52                     insert into RefNoSeed values(@prefix,0)
     53                     set @newSeed=1
     54                 end
     55             --生成流水号
     56             declare @sn varchar(20)
     57             set @sn=@prefix + cast(YEAR(@timeNow) as CHAR(4))+ dbo.F_FormattingSerialNumber(@newSeed)
     58             --插入数据表中
     59             insert into RefNoTable (insertTime,RefNo)values(@timeNow,@sn)
     60             --插入成功后更新种子值
     61             update RefNoSeed set seed=@newSeed where prefix=@prefix
     62         --无错则提交事务
     63         commit
     64     end try
     65     begin catch
     66         --出错则进行回滚
     67         rollback
     68     end catch
     69 go
     70 
     71 --插入测试数据
     72 declare @timenow datetime
     73 set @timenow=GETDATE()
     74 exec P_GenerateRefNo 'AB',@timenow
     75 waitfor delay '00:00:00.02'
     76 set @timenow=GETDATE()
     77 exec P_GenerateRefNo 'AB',@timenow
     78 waitfor delay '00:00:00.02'
     79 set @timenow=GETDATE()
     80 exec P_GenerateRefNo 'AB',@timenow
     81 waitfor delay '00:00:00.02'
     82 set @timenow=GETDATE()
     83 exec P_GenerateRefNo 'AB',@timenow
     84 waitfor delay '00:00:00.02'
     85 set @timenow=GETDATE()
     86 exec P_GenerateRefNo 'BF',@timenow
     87 waitfor delay '00:00:00.02'
     88 set @timenow=GETDATE()
     89 exec P_GenerateRefNo 'BF',@timenow
     90 waitfor delay '00:00:00.02'
     91 set @timenow=GETDATE()
     92 exec P_GenerateRefNo 'PF',@timenow
     93 waitfor delay '00:00:00.02'
     94 set @timenow=GETDATE()
     95 exec P_GenerateRefNo 'PF',@timenow
     96 waitfor delay '00:00:00.02'
     97 set @timenow=GETDATE()
     98 exec P_GenerateRefNo 'PF',@timenow
     99 waitfor delay '00:00:00.02'
    100 set @timenow=GETDATE()
    101 exec P_GenerateRefNo 'RG',@timenow
    102 
    103 --查看数据
    104 select*from RefNoSeed order by prefix
    105 select*from RefNoTable order by REFNO
    106 
    107 --清除数据
    108 delete RefNoSeed
    109 delete RefNoTable
    110 
    111 drop table RefNoSeed
    112 drop table RefNoTable
    113 
    114 if OBJECT_ID('F_FormattingSerialNumber','FN') is not null
    115     drop function dbo.F_FormattingSerialNumber
    116 go
    117 if OBJECT_ID('P_GenerateRefNo','P') is not null
    118     drop proc dbo.P_GenerateRefNo
    119 go

     

  • 相关阅读:
    【二分图最大独立集/最小割】P3355 骑士共存问题
    【费用流+正负费用处理】UVA11613 Acme Corporation
    【费用流】P2517 [HAOI2010]订货
    【最小割】P1361 小M的作物
    【最小割】[SHOI2007]善意的投票
    【最小割+割点转换】[USACO5.4]奶牛的电信Telecowmunication
    数据结构学习笔记——ST表
    图论学习笔记——LCA
    基于CNN的手写数字识别程序
    [Atcoder]M-Solutions 题解
  • 原文地址:https://www.cnblogs.com/Tench/p/SQLServerWithPrefixGenerateMultiGroupSerialNumber.html
Copyright © 2011-2022 走看看