Sybase ASE 入門 merge
merge statement では Table a のデータを Table b に マージできます。
BatchJobなどで work table の データを 本番用 Tableにコミットする場合に便利?
不安定なので個人的にはあまり推奨できない。
普通にupdate,insertしても結果はほぼ同じなので。
Sample
- m1 テーブルに m1_wテーブルを マージする
merge into m1 t using m1_w w on t.id = w.id when matched then update set name = w.name, age = w.age when not matched then insert (id,name,age) values (w.id,w.name,w.age)
update,insertでの書き換え
update m1 set t.name = w.name from m1 t, m1_w w where t.id = w.id insert into m1 (id) select id from m1_w w where not exists (select 1 from m1 t where t.id = w.id)
Notice
- なぜか Autosysから 実行すると、成功したり失敗したり不安定に。
- マージ元のテーブルが マージ先のテーブルのユニーク制約に違反してると、重複キー制約で失敗する
- 非クラスタード Index を含むテーブルをターゲットにすると duplicate エラーが発生する バグがある (どのversionか未確認)