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