6

Firebird 2.5テーブルの行を更新または挿入したいのですが、挿入している値がnullの場合は無視したいのですが。

私はこのような何かがそれをすることを望んでいました:

update or insert into TargetTable
  ( FieldA, FieldB )
values
  ( :fielda, coalesce(:fieldb, FieldB ))

ただし、Firebirdでは、「値」リストのFieldBへの参照は許可されていません。

この更新構文は許可されます:

update TargetTable
  set FieldB = coalesce( :fieldb, FieldB )
where
  FieldA = :fielda

ただし、これにはインサートを個別に処理する必要があります。

フィールド値の更新/挿入と合体の両方を取得する方法はありますか?

4

1 に答える 1

9

こちらをご覧ください:http://tracker.firebirdsql.org/browse/CORE-3456

ただし、MERGEステートメントを調べることもできます:http ://www.firebirdsql.org/refdocs/langrefupd21-merge.html

merge into TargetTable e
using (select :fielda FieldA, :fieldb FieldB from RDB$DATABASE ) n
on e.FieldA = n.FieldA
when matched then
  update set e.FieldB = coalesce( n.FieldB, e.FieldB )
when not matched then
  insert (FieldA, FieldB) values ( n.FieldA, n.FieldB )
于 2013-01-30T22:01:58.013 に答える