一个产生流水号(年月日+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位数字的流水号。您也可以修改上面的存储过程来生成符合您要求的流水号

sql产生流水号的更多相关文章

  1. SQL创建流水号

    创建流水号表 CREATE TABLE SystemSerialNo ( SerialNoId INT PRIMARY KEY IDENTITY, TableName VARCHAR(60), Pre ...

  2. SQL自动流水号函数

    CREATE FUNCTION [dbo].[f_NextBH]() ) AS BEGIN ), ),),),) FROM Shop WITH(XLOCK,PAGLOCK)) END

  3. SQL Server 存储过程生成流水号

    SQL Server利用存储过程生成流水号 USE BiddingConfig SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO -- =========== ...

  4. 通过SQL自动添加流水号

    通过SQL自动添加流水号 项目中往往有一些单据流水号或者流程流水号是希望通过新增一条记录后自动产生一个编号的,比如新增一条流程就自动根据当前日期自动添加该流程的流程流水号,下面介绍两种不同类型流水号通 ...

  5. sql 流水号

    CREATE TABLE [dbo].[SriaNum] ( [Num] [int] NOT NULL) alter PROC dpIDS_GetSerialNumber@SerialNumber V ...

  6. SQL 生成可配置流水号

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

  7. sql 流水号获取

    经常用到产生订单号等流水单号的场景,sqlserver实现流水号,如下: 表tb_b_Seq(流水号表): CREATE TABLE tb_b_Seq( Year int ,--年份 Month in ...

  8. SQL获取时间戳流水号

    流水号生成规则: 1:流水号总长度为22位数 2:流水号总共分三部分:标头(2位)+ 时间戳(YYYYMMDDHHmmSSsss共17位)+ 随机码(3位) 举例流水号:SN2015081210240 ...

  9. SQL生成包含年月日的流水号

    --************************************************************************************************** ...

随机推荐

  1. 洛谷 P2330 [SCOI2005]繁忙的都市(最小生成树)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P2330 这道题的问法也实在是太模板了吧: 1.改造的道路越少越好 2.能够把所有的交叉路口直接或间接 ...

  2. adminlte+layui框架搭建1

    之前写过一篇layui-master的UI搭建,但是感觉layui-master缺少一些东西(前台页面不过多研究),比如说页面的皮肤.菜单.插件,当然我也希望layui的插件可以越来越多,支持多个浏览 ...

  3. urlencode编码问题(以及urlparse) 转

    网址链接中的中文编码 中文的gbk(GB2312)编码: 一个汉字对应两组%xx,即%xx%xx 中文的UTF-8编码: 一个汉字对应三组%xx,即%xx%xx%xx 可以利用百度进行URL编码解码 ...

  4. 005 Genymotion模拟器的使用和逍遥模拟器的使用

    1.Genymotion模拟器 (1)Genymotion Device Manager的图标 重启软件Android Studio后,选择菜单栏“View--Toolbar”,让工具栏显示出来,可以 ...

  5. thinkphp3.2.3 批量包含文件

    自己瞎写的...凑合看吧...核心就是用正则 表达式 或者 字符串 str_replace 进行 替换....... /** * 批量包含---,不能递归包含!!! 请不要在目标目录 包含 文件夹,因 ...

  6. LeetCode905.按奇偶排序数组

    905.按奇偶排序数组 问题描述 给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素. 你可以返回满足此条件的任何数组作为答案. 示例 输入:[3,1,2, ...

  7. 【原创】elasticsearch入门

    示例 示例一: 示例二: 示例三: 示例四: ES介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Ela ...

  8. Python-删除列表中重复元素的方法

    1.set()方法 x = [1,2,3,4,5,1] y = list(set(x)) print(y) ``` [1, 2, 3, 4, 5] ``` 2. x = ['b','c','d','b ...

  9. POJ - 1080 枚举 / DP

    要求max{F/P},先枚举下界lowf,再贪心求符合约束条件的n个最小价值和 记录F的离散值和去重可以大幅度常数优化 (本来想着用DP做的) (辣鸡POJ连auto都Complie Error) # ...

  10. 软件测试作业——WordCount的测试

    一.代码提交 1.代码地址:https://gitee.com/zst1978805482/WordCount 2.作业地址:https://edu.cnblogs.com/campus/xnsy/T ...