sqlserver 实现伪序列
在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 实现伪序列相关推荐
- Oracle中的序列 sequence 用法
sybase 同埋sqlserver 系冇序列呢样野的. 但系oralce有. oralce 序列简单d来讲类似于sybase的递增列的机制, 但是sybase 一张表只允许1个递增列, 而oracl ...
- 《预训练周刊》第40期: 量子预训练、千层BERT与GPT
No.40 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...
- HDU-2062 Subset sequence 递推
题意:给定1,2,3...N个数的集合,现在求所有非空子集(相同元素不同位置视为不同)按字典序排序后的第M个集合是什么? 思路:设i个不同元素组成的非空字典序子集为kind[i],通过递推关系计算出k ...
- 跨站点脚本(xss)_跨站点脚本(XSS)和预防
跨站点脚本(xss) 如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是 ...
- 跨站点脚本(XSS)和预防
如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是无限的. 在这里,我建 ...
- Oracle从入门到精通(笔记)
一.Oracle11g概述 1.6 启动与关闭数据库实例 1.6.1 启动数据库实例 Oracle数据库实例启动分3个步骤:启动实例,加载数据库,打开数据库: 命令格式:startup [nomoun ...
- MySQL 数据库生成自动增长序号
Oracle 数据库中有 ROWNUM 这个功能,查询 list 后生成序号,很是方便,但 MySQL 是模拟了 Oracle 和 SQL Server 中的大部分功能,可自动生成序号却没有现成的函数 ...
- 文献阅读:ACME: pan-specific peptide–MHC class I binding prediction through attention-based
发表年份:2019 论文地址:下载论文 1.项目背景 预测多肽与主要组织相容性复合体(MHC)的结合在癌症治疗疫苗的开发中起着至关重要的作用.为了提高精度和减少假阳性预测的数量,改进预测和实际绑定相关 ...
- 文献阅读:DeepLigand: accurate prediction of MHC class I ligands using peptide embedding
发表年份:2019 下载地址:点击下载 目录 1.摘要: 2.数据集: 3.数据集处理: 4.模型框架: 5.提出两种可选的学习策略: 6.对比算法: 1.摘要: 提出半监督模型DeepLigand, ...
最新文章
- Exchenge2007用户设置邮件转发到外网地址
- 两台Ubuntu主机共享文件
- 树莓派小车参考方案,了解一下
- 用angr解二进制题目1
- Safari浏览器不支持……
- MySQL根据某一个或者多个字段查找重复数据
- 深入理解Android(三):Xposed详解
- Apollo使用指南(二)公共组件接入指南
- pythonif有多个条件怎么办,Python if有多个条件怎么办
- python的workbook_python openpyxl 操作 excel
- GDAL不支持创建PCIDSK的面状矢量格式
- 雷军博客分享-日本的电饭煲到底好在哪?
- mumu按键精灵_魂器学院,新手做的按键精灵脚本,基本每天的日常任务可做,mumu模拟器的...
- 解决谷歌登陆账号失败问题2020-11-21
- GO TO SHEN ZHEN
- KUKA 机器人SPS.SUB程序解析
- 计算机主板属于什么垃圾分类类别,充电宝属于什么垃圾?废弃充电宝如何垃圾分类...
- 一键Pip下载安装使用YOLO系列目标检测算法,YOLOv7都能Pip ! ! !
- python求10以内的素数_python 求100以内的素数
- 基于蒙特卡洛法 分析了风电和光伏的出力情况,之后以IEEE33节点为例进行概率潮流计算
热门文章
- android listview item 圆角,ListView圆角 实现方法(一)
- 手把手教你部署一个最小化的 Kubernetes 集群
- 1 分钟 Serverless 极速抽盲盒,自己部署自己抽
- 基于 OpenYurt EdgeX Foundry 的云边端一体化解决方案
- 云原生生态周报 Vol.10 | 数据库能否运行在 K8s 当中?
- 如何添加java环境变量_如何配置java环境变量
- java date 操作类_JAVA时间操作类常用方法汇总
- mybatis 自动生成integer_Intellij IDEA 中使用 MyBatis-generator 自动生成 MyBatis代码
- java 第9章_Java基础第9章.ppt
- Mysql主从和redis集群哪个好_Redis的三种模式:主从、哨兵、集群