--种子表
--@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. java 反射: 当Timestamp类型的属性值为null时,设置默认值

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  2. SAP-GR/IR的理解

    SAP-GR/IR的理解   http://shousitukyou.blog.163.com/blog/static/13868005820109127046318/ GR/IR 1,采购的an i ...

  3. 增加Xss过滤步骤

    1.往项目web.xml中增加以下的代码: <!-- xss param过滤开始 bgy 2014-12-25 --> <filter>  <filter-name> ...

  4. 多个App间传递数据

    平台:Android两个App:A,B:需求:在A中点击一个按钮后,启动B并把数据从A传递到B: 代码: App A: MainActivity.java中添加: Button btn2 = (But ...

  5. SQL SERVER 移动系统数据库

    移动系统数据库在下列情况下可能很有用: 故障恢复.例如,数据库处于可疑模式下或因硬件故障而关闭. 计划的重定位. 为预定的磁盘维护操作而进行的重定位. 移动 Master 数据库     在“开始”菜 ...

  6. 【Math】余弦相似度 和 Pearson相关系数

    http://cucmakeit.github.io/2014/11/13/%E4%BF%AE%E6%AD%A3%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A ...

  7. 如何通过XShell传输文件

    转载孟光孟叔的博客:  https://learndevops.cn/index.php/2016/06/14/how-to-transfer-file-using-xshell xshell目前最好 ...

  8. saiku执行过程代码跟踪

    使用了很久的saiku,决定跟踪一下代码,看看它的执行核心过程: 一.入口controller代码 1.1.页面打开之后,会发送一个ajax请求 Request URL: http://l-tdata ...

  9. WPF之DataGrid

    1.WPF 4 DataGrid 控件(基本功能篇) 基本使用,绑定数据展示 2.WPF 4 DataGrid 控件(自定义样式篇) 定义行,列,头,单元格等样式 3.WPF 4 DataGrid 控 ...

  10. Android permission 访问权限大全

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES ...