SQL Server 存储过程生成流水号
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 存储过程生成流水号的更多相关文章
- SQL Server 存储过程生成insert语句
你肯定有过这样的烦恼,同样的表,不同的数据库,加入你不能执行select insert 那么你肯定需要一条这样的存储过程,之需要传入表明,就会给你生成数据的插入语句. 当然数据表数量太大,你将最好用 ...
- SQL SERVER存储过程生成字母+数字的编码
公司内设备管理系统中设备建账功能,功能目的是对新进设备进行记录并入库.其中设备编号一项定义为自己修改(查看之前的设备号,取一个不重复的值来填写),感觉特别麻烦!用存储过程自动生成编码岂不是更效率. 需 ...
- 如何在SQL Server中生成和使用CRUD存储过程
在本文中,请参阅如何在SQL Server中生成和使用CRUD存储过程. 大多数数据库系统基于缩写CRUD调用的最简单的4种数据操作操作进行操作. 此首字母缩写词代表CREATE,READ,UPDAT ...
- SQL Server存储过程Return、output参数及使用技巧
SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...
- SQL Server 存储过程具体解释
SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理 ...
- sql server 存储过程 output 和return的使用 方法,详解
SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...
- SQL Server存储过程中使用表值作为输入参数示例
这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...
- SQL Server 存储过程(转载)
SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...
- 14、SQL Server 存储过程
SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...
随机推荐
- tomcat:run和tomcat7:run的区别,以及Apache Tomcat Maven Plugin 相关
起因: 同事部署的maven项目,之前使用 jetty,现在切换到 tomcat,但是他使用的命令是 tomcat:run ,而不是 tomcat7:run,能启动,但出现问题了. 于是搜索了一番,想 ...
- PHP 初探
由于不可描述的原因,需要运行一个PHP项目,折腾了半天却无甚效果---概念缺失. 一怒之下,决定还是先了解下PHP本身再说.先得感谢下W3School,介绍简洁明了. PHP是脚本语言! PHP不需要 ...
- 第三百二十一节,Django框架,发送邮件
第三百二十一节,Django框架,发送邮件 全局配置settings.py EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' ...
- AMD和RequireJS初识----优化Web应用前端(按需动态加载JS)
RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量.它还同时可以和其他的框架协同工作,使用Re ...
- informatica 中的workflow连接mysql数据配置DSN
先要下载mysqlodbc 一步步安装之后 ,再从管理工具里面找到ODBC,最后选择系统DSN,添加mysql驱动之后,进入添加编辑: 在workflow里面的配置连接字符串就写刚刚配置的连接名称 比 ...
- 【MYSQL】导入中文后乱码问题
http://fatkun.com/2011/05/mysql-alter-charset.html
- MathType初级教程:怎么安装MathType
MathType 由美国Design Science公司开发,是一款功能强大的数学公式编辑器,它同时支持Windows和Macintosh 两种操作系统,有很好的兼容性,能够在各种文档中加入复杂的数学 ...
- 3th January 2014
I owe my girl so much, i want to pay her, i know this is impossible,but I still try hard.
- python文件和目录操作方法大全(含实例)【python】
转自:http://www.jb51.net/article/48001.htm 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Py ...
- JavaScript作用域原理——预编译
JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程.并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数 ...