1

c# と mssql 2008 R2 を使用して、ユーザーをシステムに挿入するサービスがあります。ユーザーには、a1、b1、または c1 のような一意の番号が割り当てられており、ユーザーの挿入時に増加しますが、挿入する前に確認する必要があります使用可能な以前の一意の番号があるかどうか (一意の番号は、ユーザーの削除時に削除できます)。たとえば、データベースに 5 人のユーザーがいる場合、a1、...、a5 は予約されており、たとえば 3 番目のユーザーを削除すると、a3 は次のユーザーの挿入に使用できるようになります。これは簡単に実行できますが、挿入ごとに利用可能な一意の番号を読み取る必要があるため、挿入トリガーを使用するか、挿入前にアプリケーション コードを使用する方がよいか、私は困惑しています。

前もって感謝します

4

1 に答える 1

1

トリガーと、この方法でそれを行う方法についてはわかりませんが、コード/ストアド プロシージャで確実に実現できます。これは、1 つのトランザクションで行う必要がある 2 ステップのプロセスになります。

  • 利用可能な最小の ID を選択します
  • 新しいレコードを挿入する

重要なことの 1 つは、select クエリ中にテーブルをロックして、他のプロセスが同じ ID を取得しないようにすることです。排他ロック ヒントを使用してそれを行うことができます。コードは次のようになります。

select min(T.ID) + 1 from TableName T with(xlock)
     where not exists (select * from TableName T1 where T1.ID = T.ID + 1)
于 2013-10-05T08:37:14.193 に答える