SQL Merge ステートメントのさまざまな例を見てきました..何らかの理由で Merge テストから正しい/期待される結果が得られないように見えますが、それらはすべて優れているように見えます。
簡単な概要: いくつかの設計データを含む単純なテーブルがあります.. MERGE について読むと、「アップサート」 (つまり、レコードが存在するかどうかに応じて挿入または更新) を行うより効率的な方法が示されているようです。
したがって、SQL 2008 のコードは次のようになります (作業中のため、完全でない場合は申し訳ありません!)。
これはストアド プロシージャになるため、@values は明らかに渡されたパラメーターです。
merge designs as ds
using ( select designname, designcode from designs) as dsi
on (@passedDesignName = dsi.designname and @passedDesignCode = dsi.designcode)
when matched then
update set ds.designname = @passedDesignName, ds.designcode = @passedDesignCode
when not matched then
insert (designname, designcode)
values (@passedDesignName, @passedDesignCode)
問題は、私がテストしている7つのレコードの外にあるようです.更新に一致するレコードが1つしか見えないのに、それらすべてが更新されているようです..奇妙なことは、新しいデータ(デザイン名および designcode)、私は繰り返し挿入を取得しているようです..私の最後のテストから、私が推測している7つの新しい挿入が単なるまぐれではないように見えました..
私がこれを正しく説明したことを願っています..何か新しいものを攻撃することの一部は、ほとんどの場合、コンテキストを正しくすることですか?
フィードバックをお寄せいただきありがとうございます。
PS: 申し訳ありませんが、merge ステートメントの最後にセミコロンがあります。解析チェック/構文を完了します。