我们正在运行 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
上面的 sproc 将新创建的 row-id ( Orders.InvoiceId
) 返回给调用者。
代码运行良好,[InvoiceId]
从 1001 开始,每次连续插入递增 1。
我们的用户插入了大约 130 行。[InvoiceId]
是 1130,然后在下一次插入时,它的值跳到11091!
这是数据截图:
我对这里刚刚发生的事情感到困惑。为什么自动增量计数器突然跳过近万点?
我们使用 的值[InvoiceId]
来生成条形码,因此我们希望该值保持在特定范围内,最好是连续的系列。
我仔细阅读了 T-SQL 文档,但没有找到与我的问题相关的任何内容。这是身份字段的正常行为(任意人口)吗?