レコードが存在する場合に更新を行うストアドプロシージャを作成しました。それ以外の場合は、挿入が行われます。この方法でそれを書くの背後にある私のロジックは、更新が暗黙のは、WHERE句を使用して選択し実行し、それが0を返した場合、その後の挿入が行われることであるSQL Serverにストアドプロシージャを格納します。
update myTable set [email protected], [email protected] where [email protected]
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
:それは次のようになります。
このようにする代わりに、selectを実行し、返された行数に基づいて更新または挿入を行うこともできます。これは非効率的だと考えました。なぜなら、更新を行う場合、2つの選択(最初の明示的な選択呼び出しと2番目の暗黙的な更新)が発生するからです。 procが挿入を行う場合、効率に違いはありません。
私のロジックはここに聞こえますか? これは、挿入と更新をストアドプロシージャに組み合わせる方法ですか?
まあ、少なくとも1つの質問に答えました。その質問のコードがすでに私のように思えたので、私はコードを追加しませんでした。私はそれをトランザクションに入れますが、更新のために分離レベルを考慮しませんでした。あなたの答えにそれを指摘してくれてありがとう! – binOr