我们正在运行 SQL Server 2012 SP1 x64 (11.0.3000.0)。
我有一个表,其中InvoiceId
字段为自增、主键:
CREATE TABLE Orders(
InvoiceId bigint IDENTITY(1001,1) NOT FOR REPLICATION,
OrderId varchar(8) NOT NULL,
... -- other fields removed for brevity
CONSTRAINT [PK_ORDERS] PRIMARY KEY CLUSTERED (InvoiceId)
ON [PRIMARY],
)
可以通过类似以下的简单存储过程插入新行:
SET XACT_ABORT ON
SET NOCOUNT ON
BEGIN TRANSACTION
INSERT INTO Orders(
OrderId,
... -- other fields removed for brevity
)
VALUES (
@orderId,
...
)
SELECT @newRowId = SCOPE_IDENTITY()
COMMIT TRANSACTION
上述的存储过程将新创建的行号(Orders.InvoiceId
)返回给调用者。
这段代码一直正常工作,[InvoiceId]
从1001开始,并在每次插入后递增1。
我们的用户插入了大约130行数据。当 [InvoiceId]
到达1130时,下一次插入它的值跳到了11091!
以下是数据截图:
我对这里发生的事情感到困惑。为什么自动增量计数器突然跳过近10,000个点?
我们使用 [InvoiceId]
的值来生成条形码,因此我们希望该值保持在特定范围内,最好是连续的系列。
我查阅了 T-SQL 文档,但未能找到与我的问题相关的内容。这是自增字段的正常行为吗(任意填充)?