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仅在不存在时插入行的主要内容,如果未能解决你的问题,请参考以下文章
当行不存在时,“SELECT FOR UPDATE”是不是会阻止其他连接插入?