存储过程实现订单号,流水单号(8位)的详细思路

此文章是借鉴园中的各位大神的,本人只是略作修改。有不好的地方,欢迎吐槽。
先写实现思路,然后再贴上代码
1.建立存储过程,声明输出参数@indentNum,输出订单号
2.一般订单号由两部分组成,日期和后续的订单号,根据需求看日期后面需要跟多少位数字,此文为8位。
3.定义函数@date为日期部分,赋值。
4.判断表中是否存在当日的数据,根据日期进行查询,一般订单表中都会有日期的吧。
5.如果表中存在,则在其表中最大的订单上+1,如果没有则新增当日的第一条订单号。
:其中会用到一个平常不怎么用到的函数replicate,因为在最大的订单上+1的时候需要将高位的0补上。
语法:print replicate('0',3) ————则会输出3个0


代码如下:

USE MyBookShop
GO
--如果存在存储过程则删除
IF OBJECT_ID('PROC_NumIndent') IS NOT NULL
DROP PROC PROC_NumIndent
GO
--新建存储过程,用于生产流水单号
CREATE PROC PROC_NumIndent
@indentNum nvarchar(20) output--流水单号
AS
--日期部分为当前日期。
DECLARE @date nvarchar(20)
set @date = convert(varchar(20),getdate(),112)--格式为20130117
--判断表中是否存在当日的数据
DECLARE @CountMax nvarchar(20)
select @CountMax = max(id) from testst where convert(varchar(10),rtrim(ltrim(date))) = convert(varchar(10),rtrim(ltrim(getdate())))
--如果@CountMax不等于空,则表示表中有当日的数据
IF (@CountMax <> '')
BEGIN
declare @num nvarchar(20)
--在今天取到的最大订单上取最右边(后面)8位数转为int型加一
set @num = convert(varchar(20),convert(int,right(@CountMax,8))+1)
--用replicate函数,重复赋值‘0',补上高位
set @num = replicate('0',8-len(@num))+@num
set @indentNum = @date+ @num
print @indentNum
END
--不存在就以日期加‘00000001'为今日的第一条订单
ELSE
BEGIN
set @indentNum = @date + '00000001'
PRINT @indentNum
END
GO
--以下是执行存储过程
DECLARE @indentNum nvarchar(20)
EXEC PROC_NumIndent @indentNum

还有希望各位大神能否提供一个更好的对于日期进行比较的方法。
就是判断2个日期是否相等,数据库当中是datatime格式的,可是判断的话就比较蛋疼了。
还想只取日期部分而不取时间部分,进行判断。希望大家多来吐槽。

(0)

相关推荐

  • C#实现在购物车系统中生成不重复订单号的方法

    本文实例讲述了C#实现在购物车系统中生成不重复订单号的方法.分享给大家供大家参考.具体分析如下: 订单号在购物过程中起到了很好的识别作用,更方便的有利于工作人员识别商品,代码如下: #region 生成单据号 /// <summary> /// 生成单据号 /// </summary> /// <param name="pFromType"></param> /// <returns></returns> publ

  • PHP生成唯一订单号的方法汇总

    第一种 复制代码 代码如下: return date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); 第二种 复制代码 代码如下: return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); 第三种 //生成24位唯一订单号码,格式:YYYY-MMDD-HHII-SS-NNNN,

  • 利用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

  • C#生成唯一不重复订单号

    在弄电商类网站的时候,往往是根据年月日时分秒的格式生成订单号(yyyyMMddHHmmss),为了解决并发性,就直接在生成订单号的区域块加上lock. 下面,我们来简单测试一下. 1.新建项目(控制台应用程序) 2.新建一个类:OrderIdHelper.cs /// <summary> /// 订单助手 /// </summary> class OrderIdHelper { private static readonly object Locker = new object()

  • PHP生成唯一订单号

    在网上找了一番,发现这位同学的想法挺不错的,redtamo,具体的请稳步过去看看,我作简要概述,该方法用上了英文字母.年月日.Unix 时间戳和微秒数.随机数,重复的可能性大大降低,还是很不错的.使用字母很有代表性,一个字母对应一个年份,总共16位,不多也不少. 1. 复制代码 代码如下: <?php      $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');      $orderSn = $yCode[intv

  • 利用asp.net实现生成不重复订单号

    复制代码 代码如下: #region 生成单据号 /// <summary> /// 生成单据号 /// </summary> /// <param name="pFromType"></param> /// <returns></returns> public static string GetFormCode(FormType pFromType) { string formcode = ""

  • 存储过程实现订单号,流水单号(8位)的详细思路

    此文章是借鉴园中的各位大神的,本人只是略作修改.有不好的地方,欢迎吐槽. 先写实现思路,然后再贴上代码 1.建立存储过程,声明输出参数@indentNum,输出订单号 2.一般订单号由两部分组成,日期和后续的订单号,根据需求看日期后面需要跟多少位数字,此文为8位. 3.定义函数@date为日期部分,赋值. 4.判断表中是否存在当日的数据,根据日期进行查询,一般订单表中都会有日期的吧. 5.如果表中存在,则在其表中最大的订单上+1,如果没有则新增当日的第一条订单号. 注:其中会用到一个平常不怎么用

  • 微信公众号服务号推送模板消息设置方法(后端java)

    目录 推送的模板消息示例如下 : 设置模板消息 编码 1. 添加依赖 2. SubscriptionMessageUtil.java 3. 配置参数 4. 使用 微信测试号 总结 模板消息文档 公众号的类型分为服务号.订阅号和企业号,其中服务号和订阅号比较常见.要想实现公众号推动消息给指定的用户,其类型必须为服务号. 推送的模板消息示例如下 : 设置模板消息 此处为正式环境的设置,开发环境可使用微信测试平台提供的测试账号体验和测试公众平台的所有高级接口,无需提前申请审核,详情见本文最后章节. 首

  • ASP中有关双引号,单引号以及&号的解释

    很多ASP初学习的朋友都有可能在双引号,单引号以及&号上迷失了方向.最关键的是不理解三类符号的意思,当然也就不能很好地掌握它们的用法了.以下是我对三类符号的看法,技术不精,难免有疏忽之处,肯请大家多提意见. 1,双引号"" ASP中处在双引号中的可以是任意的字符.字符串,HTML代码.比如 <%response.write ("cnbruce here")%><hr><%response.write ("<b&g

  • SQL server高并发生成唯一订单号的方法实现

    前言 前几天写了一篇MySQL高并发生成唯一订单号的方法,有人私信问有没有SQL server版本的,今天中午特地写了SQL server版本的高并发生成唯一订单号实现,其实MySQL和SQL server原理都一样,主要是他们部分语法有些区别,所以你会发现我这篇文章文字说明几乎一样,只有代码和界面不一样. 一.场景再现 在一个erp进销存系统或0A等其他系统中,如果多人同时进行生成订单号的操作的话,容易出现多人获得同一个订单号的情况,对公司业务造成不可挽回的损失 二.如何避免高并发情况订单号不

  • MySQL高并发生成唯一订单号的方法实现

    前言 这篇博文发布后,有朋友问有没有SQL server版本的,现在有了==>传送门 一.场景再现 在一个erp进销存系统或0A等其他系统中,如果多人同时进行生成订单号的操作的话,容易出现多人获得同一个订单号的情况,对公司业务造成不可挽回的损失 二.如何避免高并发情况订单号不唯一 我们可以利用存储过程和数据表搭配,建立一张表和创建存储过程,存储过程负责生成订单号,表负责处理唯一性问题 当存储过程生成一个订单编号,首先先把订单号写进表中,再把订单号结果显示出来,把生成的订单号写进表里会出现两种情况

  • C#小程序15位转18位身份证号代码

    现在我们使用的都是18位身份证号,而以前都是15位身份证号,而如何将15位身份证号转18位身份证号转换为18位身份证号呢? 1.首先,在15位身份证的第6位之后加上"19"变为17位,即出生年月的年加上19,比如原来的92年就变为1992 2.然后,就是最后一位的计算,方法如下: 1)将1得到的17位身份证号,每一位乘以相应的系数,17位系数为{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 } 2)将(1)求得17个数相加求和

  • PHP校验15位和18位身份证号的类封装

    新公司框架源码的时候,发现了这个功能,于是搜索一番并封装了一下身份证号校验的类. 目前大家的身份证号大多是 18 位的,当然,也不排除有些老人的身份证号是 15 位的. 如果强制要求是 18 位的话,会比较好,因为 15 位的身份证号没有校验码,可以说,只要了解大概结构,随手都可以造出一系列身份证号码来. 当然,如果只是单纯的程序校验, 18 位的身份证号码也可以伪造,就是需要伪造者花点心思. 最好的还是调用相关部门给的接口,进行校验. 本文所编写的身份证号码校验,只是针对相关规则下的计算,是调

  • 微信支付之JSAPI公众号支付详解

    前提 本教程默认以下几点你已经完全满足: 开通了认证后的服务号 服务号开通的微信支付的认证 腾讯给你的邮件中有商户登录的账号和密码 拥有一个可供上传代码和设置回调域名的网站或云服务 有一点点php知识. 开通了认证后的服务号服务号开通的微信支付的认证腾讯给你的邮件中有商户登录的账号和密码拥有一个可供上传代码和设置回调域名的网站或云服务有一点点php知识. 第一步:公众号设置 1. 你的公众号,在支付认证的标签下, 内容应该和下图类似.证明公众号已经完成了认证和合约的签署. 2. 然后在微信支付–

  • java微信公众号企业付款开发

    本文为大家分享了java微信公众号企业付款的开发代码,供大家参考,具体内容如下 详情参照微信开发者文档 企业付款文档 java代码 定义所传递的参数 @RequestMapping(value = "zhifu", method = RequestMethod.GET) public @ResponseBody String getWeixinOpenid(String code, HttpServletRequest request) { // 订单号 自定义 生成32位uuid S

  • 浅谈使用C++多级指针存储海量qq号和密码

    指针是c++中很重要的一部分内容. 可以认为,指针是C++这把宝剑最锋利的部分,当然,如果你使用不当,也会伤到自己的 本篇博客,将尝试用11级指针这个结构来存储海量的QQ号和密码.首先,郑重声明,我没有海量的QQ号和密码,只是想用这种结构来解决这个不存在的问题,不存在只是对我而言的,据称,腾讯内部的一些代码对QQ的处理就是用的这种结构 何为11级指针,其实,就是在指针前面加了11个*,加一个*就是1级指针,加两个*就是二级指针 char *********** QQptr = NULL; 指针和

随机推荐