我正在使用托盘,它们的ID范围从10000000到15000000.每年循环几次,目前的解决方案是使用当前pallet_id
的表格,其触发器重置为15000000回到10000000并且通常这不是问题,因为到了发生的时间,所有数字将再次自由。这是一个问题,
我一直在研究使用SEQUENCE
而不是将这个额外的表与触发器一起使用。
我到目前为止提出的是:
sp_Counter_NextValue
CREATE SEQUENCE [Database].sp_Counter_NextValue
AS int
START WITH 10000000
INCREMENT BY 1
MINVALUE 10000000
MAXVALUE 15000000
CYCLE
插入
INSERT INTO X_PALLETS (sp_Counter_NextValue, information)
当计数器达到最大值时,如果X_PALLETS中存在数字10000000,我将如何跳过数字?
答案 0 :(得分:0)
这是最终的解决方案。
<强>序列强>
CREATE SEQUENCE [dbo].[SEQ_PALLET]
AS [bigint]
START WITH 10010341
INCREMENT BY 1
MINVALUE 10000000
MAXVALUE 15000000
CYCLE
CACHE
GO
CREATE SEQUENCE [dbo].[SEQ_PICK_PALLET]
AS [bigint]
START WITH 5541980
INCREMENT BY 1
MINVALUE 1000000
MAXVALUE 9999999
CYCLE
CACHE
GO
存储过程
ALTER PROCEDURE [dbo].[sp_Counter_NextValue]
@name nvarchar(24)
AS
BEGIN
SET NOCOUNT ON;
declare @value bigint
IF @name = 'PALLET'
BEGIN
SELECT @value = NEXT VALUE FOR SEQ_PALLET
END
ELSE IF @name = 'PICK_PALLET'
BEGIN
SELECT @value = NEXT VALUE FOR SEQ_PICK_PALLET
END
SELECT @value as VALUE
RETURN @value
END