--种子表
--@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('',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

SQLServer根据不同前缀生成多套流水号的更多相关文章

  1. SQLSERVER之高灵活的业务单据流水号生成

    SQLSERVER之高灵活的业务单据流水号生成 最近的工作中要用到流水号,而且业务单据流水号生成的规则分好几种,并非以前那种千篇一律的前缀+日期+流水号的简单形式,经过对业务的分析,以及参考网上程序员 ...

  2. 调试SQLSERVER (一)生成dump文件的方法

    调试SQLSERVER (一)生成dump文件的方法 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置调试SQLSERVER (三)使用Windbg调试SQLSERVER ...

  3. sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...

  4. 【原】Redis实现生成自增流水号

    场景: 公司内部有个业务场景是后台审核之后需要生成一个流水号,规则是: 201807280001,201807280002,201807280003,后面四位依次递增,前面年月日取当前时间并且转换成y ...

  5. Dynamics 365中使用计算字段自动编号字段实时工作流自动生成分组编码加流水号的自动编号字段值

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. SqlServer按时间自动生成生成单据编号

    SET @_tmpDateTime = GETDATE() EXEC dbo.Dtw_Common_GenerateProofCode @ProofType = 'SO',@WhsCode=@WhsC ...

  7. 外包采用Gradle生成多套app打包

    目的:可修改app名称.icon.包名.接口地址及其它 一.      修改基本配置(包名.版本号等) 配置module下的build.gradle 添加productFlavors例如: produ ...

  8. SQL 生成可配置流水号

    需求背景每执行一次方法,根据公式返回最新的流水号.第一次使用时需要先插入一条数据,BizSeqValue 为流水起始号:A2014030000,Formula 为公式:A[yyyy][mm][c4], ...

  9. SQLserver利用系统时间生成“2015-11-30 00:00:00.000”类型的时间

    select getdate() ---当前时间:2015-12-18 10:20:24.097 -------------------建立测试表 Create Table #Test ( ID IN ...

随机推荐

  1. C# 匿名委托、匿名方法、匿名对象、Lambda表达式

    一.匿名类型可通过使用 new 运算符和对象初始值创建匿名类型.示例:var v = new { Name = "Micro", Message = "Hello&quo ...

  2. 高吞吐量的分布式发布订阅消息系统Kafka--spring-integration-kafka的应用

    一.概述 Spring Integration Kafka 是基于 Apache Kafka 和Spring Integration来集成Kafka,对开发配置提供了方便. 二.配置 1.spring ...

  3. 如何查看 exec sp_execute 10 XXX, XXXX的RPC事件 内容

    使用事件探查器经常能捕捉到类似于exec sp_execute 10 XXX, XXXX的RPC事件. 我想问下从哪里可以看到存储过程sp_execute 10的内容呢?? 方法如下: 在新建的pro ...

  4. LoadRunner11.52发布,全新的VTS

    LoadRunner11.52发布,全新的VTShttp://automationqa.com/forum.php?mod=viewthread&tid=2252&fromuid=2 ...

  5. arcgis ERROR:000824 该工具未获得许可

    当时上面还说点击000824进入帮助文档,它说是由于扩展功能未勾选,于是我勾上,结果还是不行,后来它说可能是没有许可,于是我把license重新授权了一遍,结果,还是不行 其实,解决方法是在catal ...

  6. HTML5新特性之Web Worker

    1.概述 JavaScript语言采用的是单线程模型,也就是说,所有任务排成一个队列,一次只能做一件事.随着电脑计算能力的增强,这一点带来很大的不便,无法充分发挥JavaScript的潜能.龙其考虑到 ...

  7. WPF常用控件样式集锦

    1.不规则形状按钮(通过更改path实现) <Style x:Key="ButtonStyleForPath" TargetType="{x:Type Button ...

  8. PL/SQL异常

    CASE_NOT_FOUND CASE selector WHEN selector_value_1 THEN statements_1 WHEN selector_value_2 THEN stat ...

  9. 安卓开发笔记——自定义HorizontalScrollView控件(实现QQ5.0侧滑效果)

    对于滑动菜单栏SlidingMenu,大家应该都不陌生,在市场上的一些APP应用里经常可以见到,比如人人网,FaceBook等. 前段时间QQ5.0版本出来后也采用了这种设计风格:(下面是效果图) 之 ...

  10. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...