【无标题】Sql Server下实现类似Orcal的序号功能

目的:需要在2个流程上使用相同的流水号作为编号,且2个流程的编号不能重复。

所以使用了一下方法实现序号功能。

注:GUID只能实现不重复,没办法用于编号规则(如:INT0001,INT0002,...)

        

1. 执行下面脚本,创建cm_sequence表和Proc_NextNum存储过程。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[cm_sequence](
	[c_name] [varchar](50) NOT NULL,
	[current_value] [bigint] NOT NULL,
	[increment_value] [int] NOT NULL,
 CONSTRAINT [PK_cm_sequence] PRIMARY KEY CLUSTERED 
(
	[c_name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
CREATE NONCLUSTERED INDEX [IX_cm_sequence] ON [dbo].[cm_sequence]
(
	[c_name] ASC,
	[current_value] ASC,
	[increment_value] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE [dbo].[cm_sequence] ADD  CONSTRAINT [DF_cm_sequence_increment_value]  DEFAULT ((1)) FOR [increment_value]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[Proc_NextNum] 
	@seq_name	VARCHAR(50)
AS
BEGIN
	DECLARE @c_value INTEGER 
	SET @c_value=0
	SELECT @c_value=current_value FROM cm_sequence WHERE c_name = @seq_name
	UPDATE dbo.cm_sequence SET current_value=@c_value+increment_value WHERE c_name = @seq_name
	SELECT @c_value=current_value FROM cm_sequence WHERE c_name = @seq_name
	RETURN @c_value 
END
GO

2.在cm_sequence表中增加一条记录

 3. 执行存储过程:

DECLARE        @return_value int
EXEC @return_value = [dbo].[Proc_NextNum] @seq_name ='HRMSerialNum'
select @return_value  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值