2

SQL Server 2008 テーブルに行を挿入する Web フォームがあります。テーブルには一意でなければならないフィールドがありますが、何らかの理由で自動インクリメント ユーティリティの使用が許可されていません。これの代わりに、このフィールドの最大値を選択し、コードからインクリメントして、その ID を持つ行を挿入します。

問題は、複数の人がこのフォームを同時に使用すると、並行性の問題が発生し、同じ ID がテーブルに挿入されることです。すべてのユーザーが独自のセッションとスレッドを持っているため、asp.net Web プロジェクトでこの問題を解決する方法がわかりません。

asp.net プロジェクトで同時実行の問題を管理する方法についてのアイデアは非常に役立ちます。

ありがとう。

4

1 に答える 1

1

ストアド プロシージャへの挿入、またはコード内のトランザクションで挿入を実行する場合、同時実行性に問題が生じる理由はわかりません。何かのようなもの:

BEGIN TRAN
DECLARE @MAX int
SELECT @MAX = MAX(ID) FROM MyTable
INSERT INTO MyTable (@MAX, VAlue, Value2..)
COMMIT TRAN

また

SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
transaction = connection.BeginTransaction("InsertRow");

... perform insert using command object ...

transaction.Commit();
于 2012-06-28T13:47:29.007 に答える