SQL Server利用存储过程生成流水号

USE BiddingConfig
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
-- =============================================
-- Author: 小爽
-- Create date: 2017-05-25
-- Description: 业务数据KEY生成
-- 构成规则: [区域编号][应用系统编号][版本编号][功能编号][日期戳][流水记录号]
-- 数据长度: 28位
-- [区域编号]: 6位 例:320100
-- [系统编号]: 2位(交易平台[10+](业务系统、辅助开评标系统)、公共服务平台[40+]、监督平台[50+]、其他扩展[60+])
-- [版本编号]: 2位(10+)
-- [功能编号]: 4位
-- [日期戳]: 8位,格式化yyMMdd
-- [流水号]: 6位,应该当日记录流水号
-- =============================================
ALTER PROCEDURE [dbo].[proc_BuildBizDataKey]
(
@AppNo NCHAR(2), -- 系统编号
@FunctionNo NVARCHAR(10), -- 功能编号
@ReturnValue NCHAR(28) OUTPUT -- 业务数据KEY
)
AS
BEGIN
-- ======================================= 变量定义
DECLARE @AreaNo NCHAR(6) = '' -- 区域编号
DECLARE @VersionNo NCHAR(2) = '' -- 版本编号
DECLARE @LastSerialNo NCHAR(6) = '' -- 上次流水号
DECLARE @SerialNo NCHAR(6) = '' -- 流水号
DECLARE @TodayDate NCHAR(8) = '' -- 当前日期
-- ======================================================================= 变量赋值
SET @TodayDate = REPLACE(CONVERT(NVARCHAR(10),GETDATE(),120),'-','') -- 当前日期格式化:yyyyMMdd BEGIN TRY
BEGIN TRANSACTION IF(LEN(@FunctionNo)>4)
BEGIN
SET @FunctionNo =SUBSTRING(@FunctionNo,3,4)
END -- 验证参数
IF(ISNULL(@AreaNo,'') = '' OR ISNULL(@AppNo,'') = '' OR ISNULL(@VersionNo,'') = '' OR ISNULL(@FunctionNo,'') = '' OR ISNULL(@FunctionNo,'') = '')
BEGIN
RAISERROR ('空参数!', 11, 1)
END -- 取得上次业务数据KEY
SELECT
@LastSerialNo = ISNULL([SerialNo],'')
FROM [biz_DataKey]
WHERE [AreaNo] = @AreaNo
AND [AppNo] = @AppNo
AND [VersionNo] = @VersionNo
AND [FuncionNo] = @FunctionNo
AND [DateStamp] = @TodayDate
-- 数据KEY不存在,生成新KEY
IF (ISNULL(@LastSerialNo,'') = '')
BEGIN
SET @SerialNo = ''
SET @ReturnValue = @AreaNo + @AppNo + @VersionNo + @FunctionNo + @TodayDate + @SerialNo
-- 创建业务数据KEY
INSERT INTO [biz_DataKey]
([AreaNo]
,[AppNo]
,[VersionNo]
,[FuncionNo]
,[DateStamp]
,[SerialNo])
VALUES
(@AreaNo
,@AppNo
,@VersionNo
,@FunctionNo
,@TodayDate
,@SerialNo)
END
ELSE
BEGIN
SET @SerialNo = RIGHT('' + CAST((CONVERT(INT,RIGHT(@LastSerialNo,6))+1) AS NVARCHAR(10)),6)
SET @ReturnValue = @AreaNo + @AppNo + @VersionNo + @FunctionNo + @TodayDate + @SerialNo
-- 更新业务数据KEY
UPDATE [biz_DataKey]
SET [SerialNo] = @SerialNo
,[LastKeyDate] = GETDATE()
WHERE [AreaNo] = @AreaNo
AND [AppNo] = @AppNo
AND [VersionNo] = @VersionNo
AND [FuncionNo] = @FunctionNo
AND [DateStamp] = @TodayDate
END COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SET @ReturnValue = ''
SELECT ERROR_MESSAGE()
END CATCH
END GO

执行存储过程方法:

DECLARE @AppNo NVARCHAR(2) = ''                -- 系统编号
DECLARE @FunctionNo NVARCHAR(10) = '' -- 功能版本号
DECLARE @DataKey NVARCHAR(50) = '' -- DataKey -- 取得DataKey
EXEC BiddingConfig.[dbo].[proc_BuildBizDataKey] @AppNo = @AppNo,@FunctionNo = @FunctionNo, @ReturnValue = @DataKey OUTPUT

附加存放流水号表:

CREATE TABLE [dbo].[biz_DataKey](
[AreaNo] [nchar](6) NOT NULL,
[AppNo] [nchar](2) NOT NULL,
[VersionNo] [nchar](2) NOT NULL,
[FuncionNo] [nchar](4) NOT NULL,
[DateStamp] [nchar](8) NOT NULL,
[SerialNo] [nchar](6) NOT NULL,
[LastKeyDate] [datetime] NULL)

SQL Server 存储过程生成流水号的更多相关文章

  1. SQL Server 存储过程生成insert语句

    你肯定有过这样的烦恼,同样的表,不同的数据库,加入你不能执行select  insert 那么你肯定需要一条这样的存储过程,之需要传入表明,就会给你生成数据的插入语句. 当然数据表数量太大,你将最好用 ...

  2. SQL SERVER存储过程生成字母+数字的编码

    公司内设备管理系统中设备建账功能,功能目的是对新进设备进行记录并入库.其中设备编号一项定义为自己修改(查看之前的设备号,取一个不重复的值来填写),感觉特别麻烦!用存储过程自动生成编码岂不是更效率. 需 ...

  3. 如何在SQL Server中生成和使用CRUD存储过程

    在本文中,请参阅如何在SQL Server中生成和使用CRUD存储过程. 大多数数据库系统基于缩写CRUD调用的最简单的4种数据操作操作进行操作. 此首字母缩写词代表CREATE,READ,UPDAT ...

  4. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  5. SQL Server 存储过程具体解释

    SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理 ...

  6. sql server 存储过程 output 和return的使用 方法,详解

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  7. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  8. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  9. 14、SQL Server 存储过程

    SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...

随机推荐

  1. android jni aotf 错误

    在jni中希望将字符串转成浮点型数据,使用了atof函数.出现错误: failed: Cannot load library: soinfo_relocate(linker.cpp:975): can ...

  2. JDK中的序列化和反序列化

    题外话:诸事缠身,不知不觉距离上一篇就将近一个月了,读书不易,学习不易,唯有坚持. 写来写去始终不满意,索性贴一个比较好的文章吧! 参考: [Java基础]序列化与反序列化深入分析

  3. SyntaxError: inconsistent dedent

    错误原因: 一般是拷贝别人的代码过来编辑,由于编辑器不同,出现 tab和 space 的差别. 解决方法: Window->Preferences->PyDev->Editor-&g ...

  4. 解决只有单引号的Json格式转换成bean问题

    objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);单引号类似Json格式:{id:124463277,code:null ...

  5. pacbio 原始下机数据h5 文件简介

    pacbio 采用hdf5文件格式保存原始的下机数据,对于RS 测序系统而言,会产生一个 bas.h5 的文件; 以bas.h5 文件为例,看一下有下机数据中保存了那些信息 h5dump 工具可以用来 ...

  6. CentOS 6.5 下Vim 配置图解

    分享个CentOS 6.5 下Vim 配置图文详解,希望对大家有所帮助. 1. 登录并进入你常用的用户名下,查看其主目录 命令: # su xxx $ cd xxx $ ls -a 2.查看并建立目录 ...

  7. 《开源框架那些事儿22》:UI框架设计实战

    UI是User Interface的缩写.通常被觉得是MVC中View的部分,作用是提供跟人机交互的可视化操作界面. MVC中Model提供内容给UI进行渲染,用户通过UI框架产生响应,一般而言会由控 ...

  8. sip 认证分析

    转自:http://blog.csdn.net/wangqi0079/article/details/11569489 SIP类似Http协议.其认证模式也一样.Http协议(RFC 2616 )规定 ...

  9. Vertex and FragmentShader顶点与片段着色器

    一.顶点与片段着色器简介 Vertex and FragmentShader:最强大的Shader类型,也是本系列的重点,下文中简称V&FShader,属于可编程渲染管线.使用的是CG/HLS ...

  10. ChemDraw Std 14如何标记同位素

    ChemDraw软件是一款专业高效的化学绘图工具,能够绘制各种复杂的结构方程式,在基础化学.有机化学.材料化学等领域得到广泛应用.而ChemDraw Std 14 作为ChemDraw 的最新版本,增 ...