zoukankan      html  css  js  c++  java
  • 利用sql函数生成不重复的订单号

    ALTER function [dbo].[GetOrderNum](
    @ebaystockflag varchar(20)//规则字母
    )
    returns  varchar(100)
    AS
    BEGIN
            declare @dt CHAR(8)
            declare @flag varchar(20)
            set @flag='B'+@ebaystockflag
            set @dt=CONVERT(CHAR(8),GETDATE(),112)
            declare @max varchar(100)
                    SELECT @max=MAX(OrderNumber)
                    FROM tb_EbayOrder WITH(XLOCK,PAGLOCK)
                    WHERE OrderNumber like @flag+'%'
                    set @max=isnull(@max, @flag+@dt+'000')--查不到结果给个默认值
                    declare @a varchar(100)
    declare @num varchar(10)
    declare @ordernum varchar(20)
    set @a=Convert(varchar,right(@max,len(@max)-10))--截取数字部分
    if(LEFT(@a,1)=0)--以0开头
    begin
    if(SUBSTRING(@a,2,1)=0)--有两个0
    begin
    set @num=Convert(varchar,SUBSTRING(@a,3,LEN(@a-2))+1)

    end
    else if(SUBSTRING(@a,3,1)=0 and SUBSTRING(@a,2,1)=0)--有三个0
    begin
    set @num=1

    end
    else begin --只有一个0的情况
    set @num=Convert(int,SUBSTRING(@a,2,LEN(@a))+1)

    end
     end
     else begin --数字大于100的情况
     set @num=Convert(varchar,@a+1)
     end
     
     if(LEN(@num)=1)--截取后不满三位的补0
     begin set @num='00'+@num end
     if(LEN(@num)=2)
     begin set @num='0'+@num end
    set @ordernum=@flag+@dt+@num
    return  @ordernum
    END

    调用:在事务中先锁定要操作的表

    SELECT * FROM tb_EbayOrder WITH (TABLOCKX)
    SELECT *  FROM tb_EbayOrderList WITH (TABLOCKX) 
    SELECT * FROM tb_EbayOrderUserInfo WITH (TABLOCKX)

    调用:select dbo.GetOrderNum(@ebaystockflag)

  • 相关阅读:
    Selenium实战(七)——自动发送邮件
    Selenium实战(六)——数据驱动应用
    Selenium实战(四)——unittest单元测试3(测试用例的执行顺序)
    Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)
    运维工具
    实用的shell脚本面试题和答案
    mssql2000 数据库一致性错误修复
    c#基础
    任务表 步骤表
    BPM事件
  • 原文地址:https://www.cnblogs.com/zhang9418hn/p/2274796.html
Copyright © 2011-2022 走看看