zoukankan      html  css  js  c++  java
  • 通过SQL自动添加流水号

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

         流水号格式:

              第一种(数值类型):日期+流水号,比如“201104190001”-->"201104190002"; 

              第二种(文本类型):前缀+日期+流水号,比如“WT201104190001”-->"WT201104190002"。

         不论哪种情况,流水号的生成原则都是一样的,流水号的产生都需要根据当前日期产生,新增的一条记录的流水号为当前日期下所有记录中流水号最大那条加1得来。

       一、数据库中添加一个表:TestNo

           列名       数据类型                   说明

           ID         uniqueidentifier          主键

           No         bigint                        流水号字段,不过是纯数字型的流水号,这个为本例子的第一种情况,流水号可以为纯数字

           DT         datetime                   新增一条记录的当前时间,相信每新增一条记录都会记录这次操作的当前时间的。

           CharNo   varchar(50)               流水号字段,不过是可以有字符的流水号,这个为本例子的第二种情况。

      二、SQL代码

    ------
    --自动流水号为纯数字的情况,如 201104190005
    ------
    declare 
    @x int,
    @y char(8)
    select @x= COUNT(no) from TestNo where CAST(DT as date)=CAST(GETDATE() as date)
    if(@x=0)
    begin
    select @y=convert(char(8),getdate(),112)
    insert TestNo(No,DT) values(
    @y+'0001'
    ,GETDATE())
    end
    else
      insert TestNo(No,DT) values(
    (select MAX(No)+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))
    ,GETDATE())
    select * from TestNo
    
    ------
    --自动流水号为字符的情况,如 WT201104190005
    ------
    declare 
    @x1 int,
    @y1 char(8)
    select @x1= COUNT(CharNo) from TestNo where CAST(DT as date)=CAST(GETDATE() as date)
    if(@x1=0)
    begin
    select @y1=convert(char(8),getdate(),112)
    insert TestNo(CharNo,DT) values(
    'WT'+@y1+'0001'
    ,GETDATE())
    end
    else
    begin
      insert TestNo(CharNo,DT) values(
    'WT'+cast((select MAX(CAST( SUBSTRING(charno,3,12) as bigint))+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50))
    ,GETDATE())
    end
    select * from TestNo
    --------------------------------------------------------------------------------------------
    

            

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/About690878778/p/2020782.html
Copyright © 2011-2022 走看看