select/insertクエリを実行すると、SQL Serverは自動的に暗黙のトランザクションを作成し、それを1つのアトミック操作として扱いますか?SQL Serverは選択をラップしますか?クエリを暗黙的なトランザクションに挿入しますか?
それがまだない場合、テーブルに値を挿入し、次の問合せください:
INSERT INTO Table1 (FieldA)
SELECT 'newvalue'
WHERE NOT EXISTS (Select * FROM Table1 where FieldA='newvalue')
の評価との間に別のユーザーがテーブルに挿入されている「NEWVALUE」のいずれかの可能性がありますWHERE句と、INSERT句がトランザクションで明示的にラップされていない場合は、それを実行しますか?
は(あるいは、なぜしない):ここで説明しますか?あなたが探しているもののように思える、重複を避けるための良い方法のようです。 – JonnyBoats
詳細には入りませんが、複雑な理由からDBに制約を直接追加することはできません(このため、このタイプのクエリでは私の作業がわかります)。 – JohnFx
さて、私はあまりにも頭がよく見えません。私は少しの背景を与えるでしょう。 DBは、実行された実際のSQLを構築するAPIを通じて照会している第三者の製品によって管理され、所有されています。それはトランザクションのサポートを持っておらず、オブジェクトのデータベースを変更するとデータベースが保証を無効にする可能性があります。 =) – JohnFx