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)