H2仅在不存在时插入行

Posted

技术标签:

【中文标题】H2仅在不存在时插入行【英文标题】:H2 insert row only if doesn't exist 【发布时间】:2016-03-31 20:40:33 【问题描述】:

我正在使用 H2 文件数据库,但遇到了以下问题。假设我有一个名为 PROPERTIES 的表,其中包含两个 VARCHAR(255) 列:NAME 和 VALUE,其中 NAME 是主键。现在,我只想在表不存在时用新行更新表。如果存在,我不想更改该名称的值。这在 MS SQL Server 上很容易,但 H2 SQL 没有 IF,WHERE NOT EXISTS。它确实有一个名为 MERGE 的命令,但如果存在则更新。有没有办法用 H2 SQL 做到这一点? 我不相信这个问题是重复的,因为我没有看到它专门要求 H2。

【问题讨论】:

看来你可以用where not exists和H2 ***.com/questions/19768051/… 实际上它对我不起作用。似乎您不能在 H2 中使用 WHERE NOT EXISTS。我正在使用 SQuirrel 3.6 运行查询(H2 驱动程序是 h2-1.4.187) 【参考方案1】:

我对 H2 不熟悉,但如果“不存在的地方”不起作用,那么检查新值是否已经存在并仅在不存在时插入如何?

这是一个 SQL Server 示例,因此您可能需要更改语法。

Insert into Properties
(Name, Value)
source.Newname, source.NewValue
from Source
where NewName 
not in (
select Name
from Properties
)
;

【讨论】:

谢谢,但您的代码似乎是从另一个表中插入的。我需要能够将常量值直接插入表中。我将如何填充 Source? 你是如何传递值的?我们在使用变量吗?使用变量,您可以删除“from Source”子句并将 NewName 和 NewValue 列值替换为变量。

以上是关于H2仅在不存在时插入行的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 仅在不存在时添加到数组

大查询 - 仅在列值不存在时插入

当行不存在时,“SELECT FOR UPDATE”是不是会阻止其他连接插入?

仅当行不存在时才插入 SQL

仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]

Oracle - 仅在不存在时创建索引