在sqlserver生成对应格式的订单号 比如 P + 年月日+业务ID +序列。

订单号规则有两种:

单号生成规则:P+当天日期(年月日)+零售商注册序号+0000;
单一商品订单流水号: P+当天日期(年月日)+批发部注册序号+零售商注册序号+0000

思路

1. 生成 0000 --> 9999之间的伪序列

a. 新建一张序列表

b. 模拟oracle中的序列自增长

2. 用伪序列  + 规则生成订单号

创建 序列表  

1 create table seqTable  --序列表
2 (
3     sellerId int,
4     buyerId int,
5     createDate varchar(20),    --日期
6     curSeqNo    varchar(20)    --当前序号
7 )

生成序列过程

 1 /*
 2 获取序列
 3 */
 4 create procedure getSeqNo(@sid int,  -- 卖家店铺ID
 5                          @bid int,     -- 买家店铺ID
 6                          @res varchar(20) output
 7                         )     -- 返回序列号  00001
 8 as
 9
10  declare @curSeqNo varchar(20),     -- 序列号
11          @curSysDate varchar(20), -- 系统日期
12          @curNo int              -- 序列
13
14     set @curSysDate = CONVERT(varchar(100), GETDATE(), 112);
15     if (@bid is null)
16         return ('-1')
17
18     -- 卖家、买家的ID都不空
19     if (@bid is not null and @sid is not null)
20         select @curSeqNo = curSeqNo from seqTable where sellerId=@sid and buyerId=@bid and createDate=@curSysDate
21     else
22         select @curSeqNo = curSeqNo from seqTable where buyerId=@bid and createDate=@curSysDate
23
24     -- 创建新的序列
25     if (@curSeqNo is null)
26         begin
27            set @curSeqNo = '0001';
28            insert into seqTable(sellerId, buyerId, createDate,curSeqNo)
29            values (@sid, @bid,@curSysDate,@curSeqNo);
30         end
31     else
32         begin
33             set @curNo = cast(@curSeqNo as int);
34             set @curNo = @curNo + 1; --递增
35             set @curSeqNo = REPLACE(STR(@curNo, 4), ' ', '0');    --格式化字符串
36             if (@bid is not null and @sid is not null)
37                 update seqTable set curSeqNo = @curSeqNo  where sellerId=@sid and buyerId=@bid and createDate=@curSysDate;
38             else
39                 update seqTable set curSeqNo = @curSeqNo where buyerId=@bid and createDate=@curSysDate
40     end
41     set @res = @curSeqNo;
42     

获取订单号的过程

 1 /*
 2 单号生成规则:P+当天日期(年月日)+批发部注册序号+零售商注册序号+0000;
 3 单一商品订单流水号: P+当天日期(年月日)+批发部注册序号+零售商注册序号+0000+0000。
 4 */
 5
 6 create procedure getCurBillNo(@prefix varchar(20),
 7                           @sid int,        --卖家店铺ID
 8                           @bid int,        --买家店铺ID
 9                           @billNo varchar(1000) output --订单号
10 )
11
12 as
13     declare @res varchar(100),@seqNo varchar(100),@curSysDate varchar(100)
14
15     if(@bid is null)
16         return('-1')
17
18     set @curSysDate = CONVERT(varchar(100), GETDATE(), 112);
19
20     if (@prefix is null)
21         set @res ='P';
22     else
23         set @res = @prefix;
24
25     if(@sid is not null)
26         begin
27             execute getSeqNo @sid, @bid,@seqNo output
28             set @res = @res + @curSysDate+cast(@sid as varchar) + cast(@bid as varchar) + @seqNo;
29         end
30     else
31         begin
32             execute getSeqNo @sid, @bid,@seqNo output
33             set @res = @res +@curSysDate +cast(@bid as varchar) + @seqNo;
34         end
35     set @billNo = @res;
36     

 

 

 

 

这里的程序,没有考虑 并发性,以及性能。仅仅是学习使用

转载于:https://www.cnblogs.com/awq-nice/archive/2012/08/22/2650098.html

sqlserver 实现伪序列相关推荐

  1. Oracle中的序列 sequence 用法

    sybase 同埋sqlserver 系冇序列呢样野的. 但系oralce有. oralce 序列简单d来讲类似于sybase的递增列的机制, 但是sybase 一张表只允许1个递增列, 而oracl ...

  2. 《预训练周刊》第40期: 量子预训练、千层BERT与GPT

    No.40 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...

  3. HDU-2062 Subset sequence 递推

    题意:给定1,2,3...N个数的集合,现在求所有非空子集(相同元素不同位置视为不同)按字典序排序后的第M个集合是什么? 思路:设i个不同元素组成的非空字典序子集为kind[i],通过递推关系计算出k ...

  4. 跨站点脚本(xss)_跨站点脚本(XSS)和预防

    跨站点脚本(xss) 如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是 ...

  5. 跨站点脚本(XSS)和预防

    如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是无限的. 在这里,我建 ...

  6. Oracle从入门到精通(笔记)

    一.Oracle11g概述 1.6 启动与关闭数据库实例 1.6.1 启动数据库实例 Oracle数据库实例启动分3个步骤:启动实例,加载数据库,打开数据库: 命令格式:startup [nomoun ...

  7. MySQL 数据库生成自动增长序号

    Oracle 数据库中有 ROWNUM 这个功能,查询 list 后生成序号,很是方便,但 MySQL 是模拟了 Oracle 和 SQL Server 中的大部分功能,可自动生成序号却没有现成的函数 ...

  8. 文献阅读:ACME: pan-specific peptide–MHC class I binding prediction through attention-based

    发表年份:2019 论文地址:下载论文 1.项目背景 预测多肽与主要组织相容性复合体(MHC)的结合在癌症治疗疫苗的开发中起着至关重要的作用.为了提高精度和减少假阳性预测的数量,改进预测和实际绑定相关 ...

  9. 文献阅读:DeepLigand: accurate prediction of MHC class I ligands using peptide embedding

    发表年份:2019 下载地址:点击下载 目录 1.摘要: 2.数据集: 3.数据集处理: 4.模型框架: 5.提出两种可选的学习策略: 6.对比算法: 1.摘要: 提出半监督模型DeepLigand, ...

最新文章

  1. Exchenge2007用户设置邮件转发到外网地址
  2. 两台Ubuntu主机共享文件
  3. 树莓派小车参考方案,了解一下
  4. 用angr解二进制题目1
  5. Safari浏览器不支持……
  6. MySQL根据某一个或者多个字段查找重复数据
  7. 深入理解Android(三):Xposed详解
  8. Apollo使用指南(二)公共组件接入指南
  9. pythonif有多个条件怎么办,Python if有多个条件怎么办
  10. python的workbook_python openpyxl 操作 excel
  11. GDAL不支持创建PCIDSK的面状矢量格式
  12. 雷军博客分享-日本的电饭煲到底好在哪?
  13. mumu按键精灵_魂器学院,新手做的按键精灵脚本,基本每天的日常任务可做,mumu模拟器的...
  14. 解决谷歌登陆账号失败问题2020-11-21
  15. GO TO SHEN ZHEN
  16. KUKA 机器人SPS.SUB程序解析
  17. 计算机主板属于什么垃圾分类类别,充电宝属于什么垃圾?废弃充电宝如何垃圾分类...
  18. 一键Pip下载安装使用YOLO系列目标检测算法,YOLOv7都能Pip ! ! !
  19. python求10以内的素数_python 求100以内的素数
  20. 基于蒙特卡洛法 分析了风电和光伏的出力情况,之后以IEEE33节点为例进行概率潮流计算

热门文章

  1. android listview item 圆角,ListView圆角 实现方法(一)
  2. 手把手教你部署一个最小化的 Kubernetes 集群
  3. 1 分钟 Serverless 极速抽盲盒,自己部署自己抽
  4. 基于 OpenYurt EdgeX Foundry 的云边端一体化解决方案
  5. 云原生生态周报 Vol.10 | 数据库能否运行在 K8s 当中?
  6. 如何添加java环境变量_如何配置java环境变量
  7. java date 操作类_JAVA时间操作类常用方法汇总
  8. mybatis 自动生成integer_Intellij IDEA 中使用 MyBatis-generator 自动生成 MyBatis代码
  9. java 第9章_Java基础第9章.ppt
  10. Mysql主从和redis集群哪个好_Redis的三种模式:主从、哨兵、集群