SQLServer根据不同前缀生成多套流水号
--种子表
--@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根据不同前缀生成多套流水号的更多相关文章
- SQLSERVER之高灵活的业务单据流水号生成
SQLSERVER之高灵活的业务单据流水号生成 最近的工作中要用到流水号,而且业务单据流水号生成的规则分好几种,并非以前那种千篇一律的前缀+日期+流水号的简单形式,经过对业务的分析,以及参考网上程序员 ...
- 调试SQLSERVER (一)生成dump文件的方法
调试SQLSERVER (一)生成dump文件的方法 调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置调试SQLSERVER (三)使用Windbg调试SQLSERVER ...
- sqlserver 表中记录生成insert,可以加条件,可以生成建表语句
sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...
- 【原】Redis实现生成自增流水号
场景: 公司内部有个业务场景是后台审核之后需要生成一个流水号,规则是: 201807280001,201807280002,201807280003,后面四位依次递增,前面年月日取当前时间并且转换成y ...
- Dynamics 365中使用计算字段自动编号字段实时工作流自动生成分组编码加流水号的自动编号字段值
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- SqlServer按时间自动生成生成单据编号
SET @_tmpDateTime = GETDATE() EXEC dbo.Dtw_Common_GenerateProofCode @ProofType = 'SO',@WhsCode=@WhsC ...
- 外包采用Gradle生成多套app打包
目的:可修改app名称.icon.包名.接口地址及其它 一. 修改基本配置(包名.版本号等) 配置module下的build.gradle 添加productFlavors例如: produ ...
- SQL 生成可配置流水号
需求背景每执行一次方法,根据公式返回最新的流水号.第一次使用时需要先插入一条数据,BizSeqValue 为流水起始号:A2014030000,Formula 为公式:A[yyyy][mm][c4], ...
- SQLserver利用系统时间生成“2015-11-30 00:00:00.000”类型的时间
select getdate() ---当前时间:2015-12-18 10:20:24.097 -------------------建立测试表 Create Table #Test ( ID IN ...
随机推荐
- int跟byte[]数组互转的方法,整数 + 浮点型
整数: int转byte数组 public static byte[] intToBytes2(int n){ ]; ;i < ;i++) { b[i]=(-i*)); } return b; ...
- .NET分布式事务--TransactionScop
一.开启DTC服务 方式一 计算机—管理—服务—Distributed Transaction Coordinator—属性—开启 方式二 CMD命令子界面输入:net start msdtc 二.设 ...
- 菜鸟调错(八)—— Maven编译错误:不兼容的类型的解决方案
泛型在实际的工作中应用非常广泛,关于泛型就不在这里赘述了,感兴趣请戳<重新认识泛型>.项目中用到了如下的泛型: public <T> T query(String sql, R ...
- FindBugs工具常见问题
1,AM: Creates an empty jar file entry (AM_CREATES_EMPTY_JAR_FILE_ENTRY)/AM: Creates an empty zip fil ...
- 阿里云里面的Linux 系统挂载数据盘
转自:http://www.cnblogs.com/adjk/p/5112360.html 适用系统:非IO优化+SSD云盘Linux(Redhat , CentOS,Debian,Ubuntu)实例 ...
- [论文笔记] Legacy Application Migration to the Cloud: Practicability and Methodology (SERVICES, 2012)
Quang Hieu Vu, Rasool Asal: Legacy Application Migration to the Cloud: Practicability and Methodolog ...
- 自己做的加速app测试流程的小工具,目前打算开放使用,想注册的朋友抓紧了,嘻嘻
为了加速小团队app的测试流程做了这个东西,www.xunce.net 主要特性: web: 一键上传app,方便随时下载 备注测试要点 添加附件,如checklist等文档 自动识别app版本,名 ...
- 从javascript一道闭包面试题说开去
这道题目比较经典了: var a = 1; function test(){ a = 2; return function(){ console.log(a); } var a = 3; } test ...
- [转载]斐讯K2 A2版免TTL刷BREED不死Bootloader
1:路由器能正常上网,登陆进路由器 (默认密码admin) 2:用浏览器打开这个网址,如果默认ip不是192.168.2.1修改一下.打开后等待即可自动刷入breed. http://192.168. ...
- 2014-09-19.xml
<wordbook><item> <word>basel</word> <trans><![CDATA[ n. 巴塞尔( ...