`

用存储过程生成单据号

阅读更多
大多数的单据都需要有个单据号。有的单据号就是顺序编号如:000001,000002……。有的单据号是有一定意义的,如我遇见过的一个需求:单据号共12位,1位帐套号(区分使用单位的),1位单据标识号(表示该单是什么单,如:E表示订货单,X表示销售单),2位年号(05表示2005年),2位月号,2位日号,4位编号(按当天的顺序,最大9999,超过9999的就用9999表示)
JE0505070001就表示某某单位2005年5月7日的第一单订货单。用编程实现这个要求当然不算太难,不过要将单据号生成方法放到存储过程中去就要费点心思了。


下面就以插入订单为例,其中有一段代码是可提取到一个单独的存储存储过程中的,这样可增加通用性。

-插入客户订单
CREATEPROCEDUREInsertOrder
(
@CustomerIdint,
@MXnvarchar(4000),
@Incomsmallint
)

AS

SETNOCOUNTON

--这一个部分还可单独提取到一个存储过程中通过传入“单据标识号”和“单据表名”为参数---------------------------------------

--找帐套字头号
DECLARE@IHchar(1)
SELECT@IH=LEFT(IncID,1)FROMaccountsWHEREID=@Incom

--编号年月部分
DECLARE@YMchar(6)
SET@YM=CONVERT(char(6),GETDATE(),12)
--单据字头
DECLARE@DJHHchar(8)
SET@DJHH=@IH+'E'+@YM


--找编号的基值(方法:用当天的编号到排序取最大的一个。如当前最大编号为0001那么它的基值为1,这样就能得出下个编号为0002)
DECLARE@MNOINT--当天最大的单据号(数值)
SET@MNO=1
selectTOP1@MNO=CONVERT(int,RIGHT(DJH,4))+1fromOrderswhereleft(DJH,8)=@DJHHandincom=@IncomOrdersbyDJHdesc


DECLARE@DJHchar(12)

--扩充成4位十进制编号(最大可显示9999)
IF@MNO<9999
IF@MNO<999
IF@MNO<99
IF@MNO<9
SET@DJH=@DJHH+'000'+CONVERT(char(1),@MNO)
ELSE
SET@DJH=@DJHH+'00'+CONVERT(char(2),@MNO)
ELSE
SET@DJH=@DJHH+'0'+CONVERT(char(3),@MNO)
ELSE
SET@DJH=@DJHH+CONVERT(char(4),@MNO)
ELSE
SET@DJH=@DJHH+'9999'


----(可提取的部分结束)------------------------------------------------------------------------------------------------------

--插入订单
INSERTINTOOrders(DJH,CustomerId,MX,InCom)VALUES(@DJH,@CustomerId,@MX,@Incom)

RETURN
GO
分享到:
评论

相关推荐

    SQL存储过程按顺序新增单号

    用存储过程查询表单内的单号,并按照日期规律顺序写单号

    SQL server高并发下生成唯一订单号的存储过程

    这个是用SQL server写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的;原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中...

    根据当天日期生成流水单号存储过程,格式:年月日+'0001'

    根据当天日期生成流水单号存储过程 格式为 年月日+'0001'

    c#后台生成不重复的订单号及后台存储过程

    SQL,C#,不重复编码,订单号 1. C#后台封装方法 通用获取最大单据编号, 可以生成以下3个类型的单号 CG1603-000001 CG201603-000001 CG20160321-000001

    MySQL高并发下生成唯一订单号的存储过程

    这个是用mysql写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的;原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中存在...

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

    建立存储过程,声明输出参数@indentNum,输出订单号 2.一般订单号由两部分组成,日期和后续的订单号,根据需求看日期后面需要跟多少位数字,此文为8位。 3.定义函数@date为日期部分,赋值。 4.判断表中是否存在当日...

    PHP版本的自动生成有规则的订单号(或编号)

    /** * PHP版本的自动生成有规则的订单号(或编号) * 作者: 雪浪 * 日期: 2009-8-14 * 生成的格式是: ...读取文件,上次编号的值+1最为当前此次编号的值(记录以文件的形式存储) * (下月会接着这个编号) */

    实验课题二、简单物料进仓/出仓信息管理

    单号要自己编规则自动生成,单号产生规则在报告中说明;进出仓日期用日期控件;物料代码必须下拉框做选择;当物料出仓时必须判断出仓数量时候超过物料的库存数量,物料的库存数量在物料表中可以获得该物料的库存数量...

    serialNumberGenerator:一个简单的随机数生成器,用于使用jquery ajax和php的患者列表

    serialNumberGenerator 这是一个简单的Web应用程序,用于为数据库中的患者列表生成随机的唯一ID。我创建了一个简单的sql,可以将其导入以在本地计算机上进行测试,也可以根据... 生成的ID存储在数据库中。 就是这样!

    基于delphi和sqlserver数据库的物料管理系统含详细报告数据库及脚本

    1. 多物料进仓出仓,可以在一个程序中完成,也可以分开编程,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。 2. 多物料进出仓...

    仓库管理系统.zip

    也可以分开编程,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。...

    CS库存管理系统

    也可以分开编程,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。...

    C#2013+sql2008 仓库管理

    也可以分开编程,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。...

    delphi仓库管理系统

    也可以分开编程,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。...

    delphi企业管理系统

    也可以分开编程,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。...

    finance-master1简单的财务会计软件.rar

    凭证录入界面加入业务单号,根据业务单据自动生成凭证 科目关联扩展信息中增加金额反算单价数量 修复一些已知的BUG 需要在原有账套执行升级脚本2005_upgrade_01.sql 升级2.0.0.4版本说明 支持存储过程引入凭证 需要...

    库存管理系统数据库设计(4).doc

    数据存储名:入库登记表 说 明:入库货物验收通过并且入库后,仓库管理员要根据入库货 物的入库日期,入库单号,货物编号,数量,总额, 供货单位号 码,供货单位名称,仓库管理员编号, 备注等信息生成入库登 ...

    基于SpringBoot+Vue宠物商城(源码+部署说明+系统介绍+源码解释).zip

    5. 物流管理:包括物流公司的选择、快递单号的生成、物流跟踪等功能。 6. 系统设置:包括权限管理、密码找回、系统配置等功能。 7. 部署说明:详细介绍了系统的安装、部署和配置过程,以及如何使用管理员账号和...

Global site tag (gtag.js) - Google Analytics