最近、私はテーブルに対していくつかの変数の更新をしなければなりませんでしたが、私はMERGEステートメントを認識していますが(それに追いつく必要はありますが)、次のステートメントを実行して、これが「良いアイデア」であるか、私が気づいていない隠れた結果があるかどうかをチェックしたいと考えています。case文に基づくSQLの部分的なSQLの更新?
私の場合、プライマリキーをテーブルに渡しますが、渡されたパラメータがnullかどうかによって、カラムを更新します。強制的な更新(ステータスなど)次に、あなただけの上またはのいくつかの考えは、それがシナリオのMERGE文を追求するのが最善である
create procedure sp_myprocedure
as
@id bigint,
@field1 int = null,
@field2 varchar(255) = null,
@field3 char(1) = null
begin
update my_table
set
field1 = case when @field1 is not null then @field1 else field1 end,
field2 = case when @field2 is not null then @field2 else field2 end,
field3 = case when @field3 is not null then @field3 else field3 end,
where
id = @id
end
直後。これは、型構造「THEN IF /」複数を持つ保存することです。..列を更新します上記のような?事前に
多くのおかげで、
乾杯、代替のおかげで。したがって合体はより効率的に見えるでしょうか?または合体機能はより「標準的」であるか? 私はどちらも理解の観点からはかなりうまく読んでいると思いますが、可能であれば、上記の方法の1つがより立っているかどうかを知りたがっていますか? –
オプション2は、必要がない場合に更新ステートメントを実行しないので、優先されます。 –
@onedaywhen、MERGEには条件付き更新の機能がありますか?このユースケースでは、MergeはUPDATEに対してあらゆる種類の利点(機能/パフォーマンス/構文)を持っていますか?いいえ、いいえ。 –