その場合、自動インクリメント列を使用する必要はありません。ギャップを埋める場合は、それをint列に設定し、ストアドプロシージャまたは挿入でロジックを処理します。
編集:
これはint列なので、数値で並べ替えることができます。 SELECT Ids FROM Table Order By Ids
を実行するだけです。 すべてのIDを取得し、返されたデータセットのギャップを確認します。
これを行うにはおそらくもっとスムーズな方法がありますが、カーソルで結果をループしてINT
と比較することができます ループ全体で増分する変数。ギャップを見つけた場合(一致しない)-ループを中断し、そのINT
を使用します INSERT
としての値 id。
私はあなたのためにあなたのコードを書きませんが、それらはあなたを正しい方向に進めるためのいくつかのステップです。それはあなたが扱えるはずの本当に基本的なプログラミングのビットでなければなりません。
これがお役に立てば幸いです。
編集#2:
他の人が指摘しているように、あなたの最善の策はただギャップを残すことです。テーブルに長さの上限があり、IDが1〜30(奇妙)でなければならない場合を除いて、そのままにしておきます。ギャップを埋めるメリットはありません。
編集#3:
もう1つ考慮すべき点は、何らかの理由で本当に1〜30を維持する必要がある場合は、行を削除しないでください。列を追加して、各行にアクティブまたは非アクティブのフラグを付け、必要なときに非アクティブの行を更新してから、アクティブとしてフラグを付けます。これは非常にハッキーですが、要件はちょっとハッキーなので...