当前位置:Gxlcms > 数据库问题 > SQL Server 存储过程生成流水号

SQL Server 存储过程生成流水号

时间:2021-07-01 10:21:17 帮助过:17人阅读

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) = 321000 -- 区域编号 DECLARE @VersionNo NCHAR(2) = 10 -- 版本编号 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 = 000001 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(00000 + 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) = 30                -- 系统编号
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 存储过程生成流水号

标签:版本号   exe   tran   验证   arc   into   get   version   update   

人气教程排行