4

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には影響しません。

ギャップのない完全なシーケンスを作成するためにこれを解決する方法の手がかりはありますか?

4

1 に答える 1