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)

  • 相关阅读:
    flask框架中SQLAlchemy相关
    flask使用外部存储模块之数据库的使用
    flask的基础知识
    docker的下载和使用
    rbac权限管理系统的学习
    redis数据库之五种数据类型的简单操作
    使用django框架进行web项目开发需要了解的知识
    django项目常用外部模块下载和使用
    pwn学习之dl_resolve学习篇
    验证docker的Redis镜像也存在未授权访问漏洞
  • 原文地址:https://www.cnblogs.com/zhang9418hn/p/2274796.html
Copyright © 2011-2022 走看看