如何为多个DB2值更新/插入(Upsert)

如何为多个DB2值更新/插入(Upsert),db2,insert-update,upsert,db2-luw,Db2,Insert Update,Upsert,Db2 Luw,我正在尝试在DB29.7中进行UPSERT,而不创建要合并的临时表。我将值指定为参数,但是当我尝试包含多行值时,我总是会收到分隔值的逗号的语法错误 MERGE INTO table_name AS tab USING (VALUES (?,?), (?,?) ) AS merge (COL1, COL2) ON tab.COL1 = merge.COL1 WHEN MATCHED THEN UPDATE SET

我正在尝试在DB29.7中进行UPSERT,而不创建要合并的临时表。我将值指定为参数,但是当我尝试包含多行值时,我总是会收到分隔值的逗号的语法错误

MERGE INTO table_name AS tab 
USING (VALUES 
        (?,?), 
        (?,?)
    ) AS merge (COL1, COL2) 
    ON tab.COL1 = merge.COL1 
    WHEN MATCHED THEN 
        UPDATE SET tab.COL1 = merge.COL1, 
                   tab.COL2 = merge.COL2
    WHEN NOT MATCHED THEN 
        INSERT (COL1, COL2) 
        VALUES (merge.COL1, merge.COL2)
我还尝试了teknopaul的答案,但收到另一个语法错误,抱怨使用了SELECT


有人知道如何在我的合并中正确地包含带有值的表,而不在数据库中实际创建/删除一个表吗?

我相信您需要一些类似于使用SELECT*FROM values的东西。。。正如…

这可以帮助您始终填写所有行吗?还是只有一个子集?@Clockwork Muse是所有行。如果记录已经存在,我希望它更新记录,如果没有,则插入记录。不要对相关名称使用保留字:AS merge COL1,COL2。@mustaccio Good point…但是我仍然收到相同的错误:错误[42601][IBM][CLI Driver][DB2]SQL0104N发现以下意外标记。预期代币可能包括:FOR。SQLSTATE=42601