0

レコードがまだ存在しない場合にテーブルにレコードを挿入するためのより良いテクニックは何ですか?

問題は、コードが基準を持つレコードが存在するかどうかをチェックし、存在しない場合はレコードを作成することです。ただし、2番目のスレッドがやって来て、同時にチェックする可能性があります。

エレファントガンを使用しているように感じましたが、最初は機能したTABLOCKXの実験を開始しましたが、スナップショットアイソレーションの使用も検討しており、2番目のトランザクションが実行されて読み取ることができるコンテキストでは機能しません。テーブル。

これは一般的な問題であるため、より標準的な解決策があるはずです。検索対象のフィールドにはnullが含まれている可能性があり、SQL Server 2005はそのコンテキストでの一意の制約をサポートしていないため、ここでは一意のインデックスは適切ではないことに注意してください。

4

2 に答える 2

1

テーブルの更新に関する元の質問には何も表示されなかったので、次のようなものが必要な場合があります。

INSERT mytable (c1, c2, c3)
SELECT v1, v2, v3
WHERE NOT EXISTS (SELECT 1 FROM mytable WITH (UPDLOCK) WHERE c1=v1 AND c2=v2 AND c3=v3)
于 2012-07-26T21:46:44.037 に答える
0

SQL 2008の内部では、Mergeを使用することをお勧めします。ただし、2005にタグを付けました。したがって、MS SQL 2005では、トランザクションを使用するのが最善の策です。

私はこのようなものを使用します:

begin tran
   update table with (x) set ...
   where key = @key

   if @@rowcount = 0
   begin
          insert table (key, ...) values (@key,..)
   end
commit tran
于 2012-07-26T16:01:59.427 に答える