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 回答