一个产生流水号(年月日+5位流水号)的存储过程

现在客户有一个需求,要产生一个流水号,如090611+000001(年月日+五位流水号),此流水号在数据库表中是主键,且为varchar类 型。如果在当天之内插入此流水号,则此流水号递增,即:090611000001,090611000002,090611000003,如果不是在当天 时间,必须从090612000001开始递增。我写了个存储过程实现它。

create procedure test_proc
  @id nvarchar(13) output
as

begin
  set nocount on
  declare @date nvarchar(8),
          @maxdj_no numeric(13,0)
  select  @date  = convert(nvarchar(20),getdate(),112) , @maxdj_no = convert(numeric(13,0),max(id)) from XT_DJNO
  if substring(convert(char(20),@maxdj_no),1,6) = substring(@date,3,8)  --如果当日已经产生单据编号
       begin
         select @id = convert(nvarchar(13),@maxdj_no+1)
--print(@maxdj_no+1)
       insert into XT_DJNO values(substring(@id,3,13),substring(convert(char(20),@maxdj_no),1,6))
  --print(substring(convert(char(20),@maxdj_no),1,6))
       return
     end
  else
     begin
  set @date=substring(@date,3,8)
       set @id =  @date + '00001'
       insert into XT_DJNO values(@id,convert(nvarchar(13),@maxdj_no))
  --print(substring(@date,3,8))
       return
     end
end

ORACLE中生成流水号 创建一个序列:
  create sequence EXAMPLE_SEQ
  increment by 1
  start with 1
  minvalue 1
  cache 20;
  在EXAMPLE表上创建一个触发器
  CREATE OR REPLACE TRIGGER "PORTAL".TRI_EXAMPLE_TABLE BEFORE INSERT ON EXAMPLE_TABLE FOR EACH ROW
  begin
   select to_char(sysdate,'YYYYMMDD')||to_char(EXAMPLE_SEQ.nextval,'0000') into :new.EXAMPLE_ID from dual;
  end;

首先在数据库中创建一个存放流水号的表

CREATETABLE[dbo].[NumSeq] (
)  NOTNULL ,
)  NOTNULL ,
[Seq][int]NULL ,
[CrTime][datetime]NOTNULL
)

上面的代码中,Cate 字段为流水号的头,可以在下面的存储过程中用参数的方式传入,我的定义是2个字符,这个可以根据具体需要更改
  DateNo 字段为获取日期信息
  Seq 字段为流水号,但最终生成的流水号是这三个字段的相加

创建存储过程

CREATEPROC dpPMT_SGetMaintainSeq
)
)
IFNOTEXISTS(SELECT*FROM
NumSeq
WHERE
Cate)
BEGININSERTINTO
NumSeq(Cate,DateNo,Seq)
)
ENDELSEBEGINUPDATE
NumSeq
SET
SeqWHERE
Cate),MONTH(GETDATE()))
),Seq)
FROM
NumSeq
WHERE
Cate),MONTH(GETDATE()))
SELECT@MaintainNo

这个存储过程最终输出的结果如:AA071031000001 前面两位是传入的参数,中间四位是年份的后两位和月,最后的六位为6位数字的流水号。您也可以修改上面的存储过程来生成符合您要求的流水号

最新文章

  1. linux-linux top 命令各参数详解
  2. struts2案例
  3. ACCESS应用笔记<五>——慢慢要学会做项目管理·
  4. iOS 打包iPa
  5. 【前台 submit的重复提交 错误】submit的重复提交
  6. SQL Server批量数据导出导入BCP使用
  7. Java程序员学C#基本语法两个小时搞定(对比学习)
  8. .NET通用权限系统快速开发框架
  9. 数以百万计美元的融资YO是什么东东?
  10. Perl面向对象(1):从代码复用开始
  11. [HBase_1] HBase安装与配置
  12. dep包安装与依赖库
  13. 75.iOS内存管理
  14. [HDFS_2] HDFS 的 Shell 操作
  15. 爬虫解析库——BeautifulSoup
  16. php url链接地址传数组方法 json_decode解析数组失败 经过url链接的json数组解析出错的解决方法 (原)
  17. trufflesuite/truffle-hdwallet-provider
  18. 20145302张薇 《网络对抗技术》逆向及BOF基础实践
  19. go语言基础之不同目录
  20. lvm笔记

热门文章

  1. JavaWeb学习笔记(八)—— EL表达式
  2. python学习之路---day06
  3. C# 字符串操作,可空类型,文档注释,嵌套类型
  4. js实现点击按钮滚动条缓慢滚动到顶部
  5. [转] Java8 日期/时间(Date Time)API指南
  6. aoj0033
  7. (转)Linux网络状态工具ss命令使用详解
  8. HDU 4460 Friend Chains
  9. 8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07
  10. 【Linux相识相知】bash的特性