我正在尝试生成从1开始并以1递增的唯一采购订单号。我有一个使用以下脚本创建的PONumber表:
CREATE TABLE [dbo].[PONumbers]
(
[PONumberPK] [int] IDENTITY(1,1) NOT NULL,
[NewPONo] [bit] NOT NULL,
[DateInserted] [datetime] NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PONumbersPK] PRIMARY KEY CLUSTERED ([PONumberPK] ASC)
);
使用此脚本创建的存储过程:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
在创建时,这可以正常工作。当存储过程运行时,它将以所需的编号开始,并以1递增。
奇怪的是,如果我关闭计算机或使其进入休眠状态,那么下一次该过程运行时,序列将增加近1000。
查看以下结果:
您会看到数字从8跃升至1002!
- 为什么会这样呢?
- 如何确保不会像那样跳过数字?
- 我需要的是SQL生成的数字是:
- a)保证唯一。
- b)增加所需量。
我承认我不是SQL专家。我是否误解了SCOPE_IDENTITY()的作用?我应该使用其他方法吗?我研究了SQL 2012+中的序列,但是Microsoft表示默认情况下不能保证它们是唯一的。