SQLServer根据不同前缀生成多套流水号
2014-10-22 11:48
169 查看
--种子表 --@prefix 前缀 --@seed 种子值 create table RefNoSeed( prefix char(4) unique, seed int ) go --测试表 --@insertTime 插入时间(仅测试用途) --@RefNo 流水号 create table RefNoTable( insertTime datetime unique, RefNo varchar(20) unique ) go if OBJECT_ID('F_FormattingSerialNumber','FN') is not null drop function dbo.F_FormattingSerialNumber go --格式化数值,用于把种子数值转换为10个字符长度的字符串,不足位数前面添加0 --@sn 种子值 --returns 10个字符长度字符串 create function dbo.F_FormattingSerialNumber(@sn int) returns varchar(10) begin return cast(replicate('0',10-len(cast(@sn as varchar(10)))) + cast(@sn as varchar(10)) as varchar(10)) end go if OBJECT_ID('P_GenerateRefNo','P') is not null drop proc dbo.P_GenerateRefNo go --获取前缀,生成流水号 --@prefix 前缀 --@timeNow 时间(仅测试用途) create proc dbo.P_GenerateRefNo @prefix varchar(20), @timeNow datetime as begin try --开启事务 begin tran set nocount on; declare @newSeed int --根据前缀获取现在的种子值并+1为新种子值 set @newSeed=(select seed from RefNoSeed where prefix=@prefix)+1 --若不存在种子值,则按照前缀添加种子值,并把新种子值设置为1 if @newSeed is null begin insert into RefNoSeed values(@prefix,0) set @newSeed=1 end --生成流水号 declare @sn varchar(20) set @sn=@prefix + cast(YEAR(@timeNow) as CHAR(4))+ dbo.F_FormattingSerialNumber(@newSeed) --插入数据表中 insert into RefNoTable (insertTime,RefNo)values(@timeNow,@sn) --插入成功后更新种子值 update RefNoSeed set seed=@newSeed where prefix=@prefix --无错则提交事务 commit end try begin catch --出错则进行回滚 rollback end catch go --插入测试数据 declare @timenow datetime set @timenow=GETDATE() exec P_GenerateRefNo 'AB',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'AB',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'AB',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'AB',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'BF',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'BF',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'PF',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'PF',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'PF',@timenow waitfor delay '00:00:00.02' set @timenow=GETDATE() exec P_GenerateRefNo 'RG',@timenow --查看数据 select*from RefNoSeed order by prefix select*from RefNoTable order by REFNO --清除数据 delete RefNoSeed delete RefNoTable drop table RefNoSeed drop table RefNoTable if OBJECT_ID('F_FormattingSerialNumber','FN') is not null drop function dbo.F_FormattingSerialNumber go if OBJECT_ID('P_GenerateRefNo','P') is not null drop proc dbo.P_GenerateRefNo go
相关文章推荐
- HttpHandlerFactory来根据不同的后缀名调用不通的图片生成Handler来生成图片
- 根据年月日生成编号sqlserver
- SqlServer 生成流水号
- 14章 解答4 根据指定不同字符,生成不同三角形
- Sqlserver根据表名生成insert 插入语句的sql
- 根据日期+顺序号生成流水号的存储过程
- oracle与sqlserver利用函数生成年月日加流水号
- 在项目中,如何根据当前的流水号,生成下一个流水号!
- 根据SQLServer数据表生成C#实体类
- .net 实战 根据configuration选项生成不同的config文件
- Log4net 根据日志类别保存到不同的文件,并按照日期生成不同文件名称
- sqlserver之高灵活的业务单据流水号生成
- Maven发布配置-根据不同的环境配置生成不同环境的War包
- android eclipse 根据屏幕密度自动生成不同分辨率的图片
- Log4Net根据不同的Logger名称,生成日志文件到不同的地方。
- delphi根据不同图片生成不规则窗口的实现(仅限于BMP格式)
- sql update 编号前增加数字前缀等 根据相同字段更新不同字段
- SQLserver 存储过程生成任意进制/顺序流水号
- 不同机器不重复编号、流水号生成
- oracle与sqlserver利用函数生成年月日加流水号