H2给出了从官方H2站点复制的SQL合并或更新查询的语法错误

时间:2019-07-18 08:04:26

标签: merge syntax h2 upsert

我想对H2数据库运行upsert查询,因此,“匹配时”然后更新“未匹配时”而不是“插入”。

我有桌子: 创建表TESTTABLE (NAME VARCHAR2(100)非空,  NUMBER1 INT,  NUMBER2 INT, );

其中一行: 彼得1 2

我尝试了从H2官方网站复制这些代码:

MERGE INTO TESTTABLE AS T USING DUAL ON NAME = 'Peter'
    WHEN NOT MATCHED THEN INSERT VALUES ('Peter3', 1, 2)
    WHEN MATCHED THEN UPDATE SET NUMBER1 = 2 and NUMBER2 = 3;

错误: SQL语句“ MERGE INTO TESTTABLE AS [*] T正在使用...

中的语法错误

没有AS:

MERGE INTO TESTTABLE USING DUAL ON NAME = 'Peter'
    WHEN NOT MATCHED THEN INSERT VALUES ('Peter3', 1, 2)
    WHEN MATCHED THEN UPDATE SET NUMBER1 = 2 and NUMBER2 = 3

错误:  SQL语句“ MERGE INTO TESTTABLE USING [*] DUAL ON NAME ='Peter'...

中的语法错误

其他尝试:

MERGE INTO TESTTABLE (NAME, NUMBER1, NUMBER2)
    KEY(NAME) VALUES('PETER')
    WHEN MATCHED THEN UPDATE SET NUMBER1 = 2, NUMBER2 = 3
    WHEN NOT MATCHED THEN INSERT VALUES ('Peter3', 1, 2);

错误: SQL语句“ [[]]匹配之后合并到TESTTABLE(名称,NUMBER1,NUMBER2)键(名称)值('PETER')中的语法错误”;

在h2database.com上似乎没有代码正确。 任何想法? 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

网站上的文档适用于H2的最新版本,当前版本为1.4.199。

您的错误消息肯定来自某些不支持标准MERGE语句的旧版本。您需要将H2版本升级到最新版本。

请注意     合并到测试台(NAME,NUMBER1,NUMBER2)         键(名称)值(“ PETER”)         配对时... 完全无效。 H2中有两种不同的不兼容MERGE语句。 H2特定的具有KEY子句和VALUES子句(或子查询)的标准子句,而标准的具有附加的源表,ON条件和WHEN MATCHED / WHEN NOT MATCHED子句的子句。这两个命令在文档中分别描述。您不能混合使用它们。