我想在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
但这需要我单独处理插入物。
有没有办法同时更新/插入和合并字段值?
最佳答案
在这里看看: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 )
关于sql - Firebird 'update or insert into'在值中具有字段引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14614352/