一个产生流水号(年月日+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. CentOS 7 基础网络配置

    基础的网络配置,包括静态IP地址.子网掩码.网关.DNS,使用 nmtui 和 nmcli 工具时必须开启 NetworkManager 服务 文本用户界面工具 nmtui [root@localho ...

  2. liunx 安装 phpstudy

    phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 phpStudy for Linux 支持Apache/Ng ...

  3. Nginx负载均衡详解

     upstream mysvr {  server 192.168.10.121:3333; server 192.168.10.122:3333; } server { .... location ...

  4. npm install时 报错Maximum call stack size exceeded

    给npm降级或者升级 降级 : npm install -g npm@5.4.0 升级 : npm install -g npm  升级到最新版

  5. Oracle 中 Cursor 介绍

    一  概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理 ...

  6. n个骰子的和,组成数字m的可能

    //n个骰子的和,组成数字m的可能 function f(n,m) { if(n==1){ return 1; } var len=m-n; var sum=0; while (len>=0){ ...

  7. PIE SDK去相关拉伸

    1.算法功能简介 由于高度相关的数据集经常生成十分柔和的彩色图像,因此经常使用 去相关拉伸工具来体消除多光谱数据集中的高度相关性, 从而生成一幅色彩亮丽的彩色合成图像.去相关拉伸需要 3 个输入波段, ...

  8. 1、java线程模型

    要了解多线程,先需要把java线程模型搞清楚,否则有时候很难理清楚一个问题. 硬件多线程: 物理机硬件的并发问题跟jvm中的情况有不少相似之处,物理机的并发处理方案对于虚拟机也有相当大的参考意义.在买 ...

  9. TOJ 3176 Challenge from XOR

    Description Mr. AngelClover just learnt XOR on his Computer Class. XOR is a bit arithmetic operator ...

  10. Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记

    Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...