Firebird 有两种选择
更新或插入
你可以使用UPDATE OR INSERT:
UPDATE OR INSERT INTO table (col1, col2, col3)
VALUES ('a', 'b', 'c')
MATCHING (col1, col2)
MATCHING 子句是可选的。如果你忽略它,它将使用主键:
UPDATE OR INSERT 插入一条新记录或更新一条或多条现有记录
记录。采取的行动取决于为
MATCHING 子句中的列(或者,如果后者不存在,则在
首要的关键)。如果找到与这些值匹配的记录,它们
被更新。如果没有,则插入一条新记录。
与您问题中的代码相反,这将不允许您自定义更新:它将使用与插入时相同的值。
如果您想要更多控制权,请使用合并
合并
MERGE 语句为您提供更多控制权,但可能更冗长:
MERGE INTO table AS t
USING (select 'a' as new1, 'b' as new2, 'c' as new3 from rdb$database) as s
ON t.col1 = s.new1 and t.col2 = s.new2
WHEN MATCHED THEN
UPDATE SET t.col4 = t.col3
WHEN NOT MATCHED THEN
INSERT (col1, col2, col3) values (s.new1, s.new2, s.new3)
然而与UPDATE OR INSERT相反,MERGE不能使用主键。您需要自己在ON 子句中指定重复的规则。