SQL Serverが保証する唯一のことは、IDENTITY列が常にインクリメントされることです。
ただし、考慮事項:
- INSERTが失敗した場合、IDENTITY列はとにかくインクリメントされます。
- ロールバックが発生した場合、IDENTITY列は前の値に戻りません。
これが、SQLServerがシーケンシャルINDENTITYを保証しない理由を説明しています。
DBCCコマンドを使用して、そのようにIDENTITY列をリセットする方法があります。ただし、その前に、次のことを考慮してください。
- IDENTITY列が他のテーブルから参照されていないことを確認してください。外部キーが更新されない可能性があるため、大きな問題が発生します。
- SET IDENTITY_INSERT ON / OFF命令を使用すると、行を挿入するときにIDENTITYを手動で指定できます(後でオンにすることを忘れないでください)。
IDENTITY列は、DBRMで変更されない最も重要な要素の1つです。
これがあなたを助けるべきリンクです:IDENTITY列を理解する
編集: LastMaxのIDENTITY列は、挿入された行ごとに常に増分するため、あなたがしているように見えることは機能します。それで:
- データテーブルから行を選択します。
- LastMax状態を保存します。
- Id>LastMaxの行を選択します。
3)IDENTITY列がLastMaxよりも大きい行のみを選択するため、LastMaxが保存されたために挿入されます。