Firebird "обновить или вставить в" с ссылкой на поле в значениях?

Я хотел бы обновить или вставить строку в таблицу 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

но это требует, чтобы я обрабатывал вставки отдельно.

есть ли способ получить оба обновить / вставить и объединить значение поля?

1 ответов


посмотрите здесь: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 )