07/06/05 11:47:32 5EDNjM+0
質問です。
環境:VS2005、C#+SQL2005
複数人が更新するWebアプリで楽観的ロックを使用してDBにレコードをインサートする際
あるカラムA(IDのような一意のint型のカラム)に重複した値が入るのを避けるにはどうすれば良いのでしょうか?
SQL権限の関係で主キーは設定出来ずSQLで自動で値をふる機能も使えません。
現状は
①DBからカラムAの最大値を取得して1を足す
②①で取得した値をインサート文のvalueに入れてインサート文を実行
という流れを一つのトランザクションで行っていますが、複数の端末から同時に上記①②の処理が
実行された時、カラムAの値が重複する場合があります。
解決策として
1)①の開始直前からインサートが終わるまでテーブルをロック
2)①の処理で取得した値を変数に入れておきインサート実行の直前に重複のチェック
の二つを考えているのですがどちらも決めてに欠けています…
1)はパフォーマンスの低下は確実、2)は根本的解決になっていない。
これ以外の重複を避ける方法というのはないでしょうか?
それとも重複を諦めるかパフォーマンスを諦めるかの二択になるんでしょうか?