FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5302|回复: 0
打印 上一主题 下一主题

自动流水编号的存储过程[分享]

[复制链接]
跳转到指定楼层
楼主
发表于 2018-5-1 14:21:13 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
在业务系统中,我们经常要使用格式化流水编号,且流水编号是自动排序的,很多朋友就想到用自增,但是业务中不一定满足,今天就遇到一个客户需要格式生成业务编号的,业务需求如下:
1.编号连续
2.每月从1开始,最大5位,不足5位左边0补充
3.格式化为:编码=年(2位)+月(2位)+流水号(5位);
针对上述,写了一个存储过程,并附带一个表存储,没什么技术含量,技术大神飘过。
效果图如下:


存储流水编号的表:
CREATE TABLE [dbo].[data_Number] (
  [nid] int  IDENTITY(1,1) NOT NULL,
  [ny] varchar(4) COLLATE Chinese_PRC_CI_AS  NULL,
  [nm] varchar(2) COLLATE Chinese_PRC_CI_AS  NULL,
  [number] varchar(10) COLLATE Chinese_PRC_CI_AS  NULL,
  [sindex] int  NULL,
  CONSTRAINT [PK__data_Num__DF97D0F537FA4C37] PRIMARY KEY CLUSTERED ([nid])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
ON [PRIMARY]
)  
ON [PRIMARY]
GO


ALTER TABLE [dbo].[data_Number] SET (LOCK_ESCALATION = TABLE)
GO


EXEC sp_addextendedproperty
'MS_Description', N'id',
'SCHEMA', N'dbo',
'TABLE', N'data_Number',
'COLUMN', N'nid'
GO


EXEC sp_addextendedproperty
'MS_Description', N'年份',
'SCHEMA', N'dbo',
'TABLE', N'data_Number',
'COLUMN', N'ny'
GO


EXEC sp_addextendedproperty
'MS_Description', N'月份',
'SCHEMA', N'dbo',
'TABLE', N'data_Number',
'COLUMN', N'nm'
GO


EXEC sp_addextendedproperty
'MS_Description', N'当前编号',
'SCHEMA', N'dbo',
'TABLE', N'data_Number',
'COLUMN', N'number'



存储过程代码:
CREATE PROCEDURE [dbo].[GetNumber]
@rst AS varchar(10) OUTPUT
as
BEGIN
DECLARE @y VARCHAR(20);
DECLARE @m VARCHAR(2);
--取得年份和月份
set @y=DATEPART(yyyy,GETDATE());
set @y= RIGHT(convert(varchar,@y),2)
--月份拼凑
set @m=DATEPART(mm,GETDATE());
DECLARE @lg int;
SELECT @lg=len(@m);
if @lg=1
BEGIN
set @m='0'+@m;
END
--获取当前数据库最大的ID
DECLARE @mx INT;
SELECT @mx=MAX(sindex) FROM data_number where ny=@y and nm=@m;

if @mx is NULL --判断是否为空
BEGIN
set @mx=1;
END
else
BEGIN
set @mx=@mx+1;
END
set @rst=REPLICATE('0',5-len(@mx))+CONVERT(VARCHAR,@mx);
set @rst=@y+@m+@rst;
INSERT into data_Number(ny,nm,number,sindex) values (@y,@m,@rst,@mx);
RETURN @rst;
END

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-1 07:00 , Processed in 0.048830 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表