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

     

  • 相关阅读:
    投影变换 到 uv坐标 xy/w 齐次坐标
    GdiPlus[19]: IGPPathGradientBrush 之 SetCenterPoint
    GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
    GdiPlus[24]: IGPPrivateFontCollection: 分别从文件和内存加载字体
    GdiPlus[23]: IGPFontFamily
    GdiPlus[25]: IGPInstalledFontCollection: 获取已安装的字体列表
    GdiPlus[20]: IGPPathGradientBrush 之 SetFocusScales
    GdiPlus[22]: IGPFont
    可爱的 CreateMessageDialog
    GdiPlus[18]: IGPPathGradientBrush 之 CenterColor、SurroundColors
  • 原文地址:https://www.cnblogs.com/Tench/p/SQLServerWithPrefixGenerateMultiGroupSerialNumber.html
Copyright © 2011-2022 走看看