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

H2 gives syntax error for SQL merge or update query copied from official H2 site

我想 运行 在 H2 数据库上插入查询,所以当匹配时,然后更新当不匹配时而不是插入。

我有table: 创建 TABLE 测试TABLE (名称 VARCHAR2(100) 不为空, NUMBER1 INT, NUMBER2 情报, );

其中有 1 行: 彼得 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 USING ...


没有 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 语句 "MERGE INTO TESTTABLE (NAME, NUMBER1, NUMBER2) KEY(NAME) VALUES('PETER') WHEN[*] MATCHED THEN" 中的语法错误;

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

网站上的文档是H2的最新版本,目前是1.4.199。

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

请注意 合并到测试表中(名称,数字 1,数字 2) 键(名称)值('PETER') 匹配时…… 根本无效。 H2 中有两个不同的不兼容 MERGE 语句。具有 KEY 子句和 VALUES 子句(或子查询)的特定于 H2 的查询和具有附加源 table、ON 条件和 WHEN MATCHED / WHEN NOT MATCHED 子句的标准查询。这两个命令在文档中分别进行了描述。你不能混用。