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 ...
随机推荐
- word2007无法执行语言识别
步驟1:取消“啟用自動語言檢測”在“審閱”選項卡上的“校對”組中,單擊“設置語言”(一個圖標,看起來類似於前麵帶有複選標記的地球).取消“自動檢測語言”複選框.步驟2:取消“鍵入入時檢查拚寫”到Wor ...
- SQL语句删除所有表
) ) ) ) ) ) ) ) ) TABLE_NAME CONSTRAINT_NAME CONSTRAINT_NAME TABLE_NAME ) ) ) TABLE ...
- 修改 Semantic UI 的默认字体
Semantic UI 默认使用的是谷歌提供的字体,并且是直接使用了谷歌的官方链接.由于大家都知道的原因,谷歌网站在国内访问速度很差,甚至根本无法访问,还有就是可能会在离线环境下使用 Semantic ...
- iOS开发——项目实战总结&带你看看Objective-C的精髓
带你看看Objective-C的精髓 1:接口与实现 @interface...@end @implementation...@end @class 接口(头文件) 实现文件 向前引用 注:类别通过增 ...
- Xcode 8 新特性
在2016 苹果全球开发者大会(WWDC)期间, 苹果一如既往地给开发者们披露了新版的集成开发工具 – Xcode, 在过去的每一次大版本发布中,苹果都会积极地改进开发工具,添加一些极具吸引力的新功能 ...
- ffrpc的php客户端lib
摘要: ffrpc 是c++异步通讯库,使用ffrpc可以非常容易的构建服务器程序.为了使用方便,ffrpc提供了python.php的客户端lib,这样使用php于c++构建的server也是顺手拈 ...
- wordpress使用技巧
1.iis6下wordpress去掉index.php 1)安装ISAPIRewritev3.1.0.73 http://bbs.z.admin5.com/forum.php?mod=viewthre ...
- 延迟渲染 deferred Shading
流程: 1.先渲染一遍物体的位置,法线 和颜色 到三张纹理 2.在根据这三张纹理渲染一遍灯光 3.合成颜色图和灯光图 (ssao图) 看上去好像灯光不多,其实我在这里加了200个灯, 每个球代表 ...
- 【转】--在Android源码树中添加userspace I2C读写工具(i2c-util)
通过/dev/i2c-n节点,用户可以在userspace直接访问板上的i2c外设寄存器,主要是透过I2C_RDWR这个IO控制命令将i2c_msg数组传递给kernel去执行.下面的代码可以完成这个 ...
- 【Android】如何实现ButterKnife
如何实现ButterKnife ButterKnife的原理简述 示例代码ButterKnifeProcedure Pluggable Annotation Processing 注解处理器 Java ...