Windows サーバー上に一部のユーザーのデータベース レコードがあります。列の 1 つはユーザーの SID (そのユーザーの一意の文字列) です。
ユーザー宛てのメッセージを受け取ったら、最初に SID 列の SID 値を使用してレコードのクエリを実行したいと考えています。レコードが返されない場合は、その SID 値でレコードを作成します。ただし、クエリと追加の間に、別のスレッドが同じユーザー/SID を持つメッセージを取得できます。したがって、2回追加することになります。
トランザクションが完了するまで他のレコードをテーブルに追加できないトランザクションを作成する方法はありますか?
または、テーブル全体をロックするより良い方法はありますか?クエリ/追加がどれほど速くても、それはチョーク ポイントです。(これが最善の方法である場合、トランザクションなしでクエリを実行し、存在する場合は返し、まれに存在しない場合にのみトランザクションを実行し、再度クエリを実行して追加します。)
列が一意であることを SQL Server に伝える方法はありますか? SQL Server Management Studio で無効になっている設定のプロパティは、
varchar
.
ありがとう - デイブ