SEQUENCE
テーブルのトランザクション フォリオを設定するために使用した があります。
CREATE SEQUENCE [Seq].[Folio]
AS [bigint]
START WITH 114090
INCREMENT BY 1
MINVALUE -9223372036854775808
MAXVALUE 9223372036854775807
CACHE
今日、好奇心のために私は次のことを行いました:
SELECT folio
FROM transactions
ORDER BY folio DESC
ギャップがあり、テーブルにフォリオが欠落していることに驚きました。
例:
- 898、897、894、892、890、889 ...
つまり、何かが起こっているということです。詳細情報を提供するためにINSERT
、私が使用したストアドプロシージャには、INSERT INTO...
DECLARE @numfolio int
SELECT @numfolio = NEXT VALUE FOR Seq.Folio
アプリケーションから情報を保存するときにデータベース トランザクションを使用したので、すべてがうまくいけばアプリが実行しCOMMIT TRANSACTION
、うまくいかなければ私が実行しROLLBACK TRANSACTION
ます。
問題の原因はトランザクションにあると思うので、エラーが発生した場合NEXT VALUE
、シーケンスの はすでに生成されており、それROLLBACK
には影響しません。
ギャップのない完全なシーケンスを作成するためにこれを解決する方法の手がかりはありますか?