我想对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上似乎没有代码正确。 任何想法? 感谢您的帮助!
答案 0 :(得分:0)
网站上的文档适用于H2的最新版本,当前版本为1.4.199。
您的错误消息肯定来自某些不支持标准MERGE语句的旧版本。您需要将H2版本升级到最新版本。
请注意 合并到测试台(NAME,NUMBER1,NUMBER2) 键(名称)值(“ PETER”) 配对时... 完全无效。 H2中有两种不同的不兼容MERGE语句。 H2特定的具有KEY子句和VALUES子句(或子查询)的标准子句,而标准的具有附加的源表,ON条件和WHEN MATCHED / WHEN NOT MATCHED子句的子句。这两个命令在文档中分别描述。您不能混合使用它们。