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 は、新しく作成された行 ID ( Orders.InvoiceId
) を呼び出し元に返します。
コードは[InvoiceId]
1001 から始まり、連続する挿入ごとに 1 ずつ増加して、完全に機能していました。
ユーザーは約 130 行を挿入しました。[InvoiceId]
は 1130 でしたが、次の挿入でその値は11091に跳ね上がりました!
データのスクリーンショットは次のとおりです。
ここで何が起こったのか、私は困惑しています。auto-inc カウンターが突然 10,000 ポイント近くスキップしたのはなぜですか?
の値を使用して[InvoiceId]
バーコードを生成するため、値が特定の範囲内、できれば連続したシリーズ内にとどまるようにします。
T-SQL のドキュメントを熟読しましたが、問題に関連するものは見つかりませんでした。これは ID フィールドの通常の動作 (任意の母集団) ですか?