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

|