Sql 如果有';没有什么要更新的

Sql 如果有';没有什么要更新的,sql,Sql,我需要做一个sql查询,它试图通过主键更新一行,如果它不存在,则插入它。该解决方案需要对大多数数据库(MySQL、H2、Postgres、Oracle、DB2、MSSQL、Hsql、Derby)具有通用性 代码示例请考虑一个由两列组成的简单表:ID(PR.KEY)和TXT < P>您必须使用存储过程来执行此操作。 请参阅:必须使用存储过程才能执行此操作。 请参阅:您需要SQL的MERGE语句,但它不能在任何地方工作: MERGE into thetable using (select theid

我需要做一个sql查询,它试图通过主键更新一行,如果它不存在,则插入它。该解决方案需要对大多数数据库(MySQL、H2、Postgres、Oracle、DB2、MSSQL、Hsql、Derby)具有通用性


代码示例请考虑一个由两列组成的简单表:ID(PR.KEY)和TXT

< P>您必须使用存储过程来执行此操作。
请参阅:

必须使用存储过程才能执行此操作。
请参阅:

您需要SQL的
MERGE
语句,但它不能在任何地方工作:

MERGE into thetable using (select theid from thetable)
when matched then update thetable thecolumn = thevalue where id = theid
when not matched then insert into thetable blablabla;

另一种解决方案是无论如何都尝试插入,处理错误,检测它是否违反约束,如果违反约束,则进行更新。

您需要SQL的
MERGE
语句,但它不能在任何地方工作:

MERGE into thetable using (select theid from thetable)
when matched then update thetable thecolumn = thevalue where id = theid
when not matched then insert into thetable blablabla;
另一种解决方案是无论如何都尝试插入,处理错误,检测是否违反了约束,如果违反了约束,则进行更新。

可能:

INSERT INTO table (id,txt) VALUES (1,"Hello")
  ON DUPLICATE KEY UPDATE txt="World";
但这只是MySQL可能:

INSERT INTO table (id,txt) VALUES (1,"Hello")
  ON DUPLICATE KEY UPDATE txt="World";

但是这只是MySQL

它的名称是
UPSERT
。这通常是通过
MERGE
实现的,但这并不是通用的。关于“大多数数据库”,你能说得更具体些吗?@Oded什么都没有。我不知道该怎么办try@MartinSmith我知道MySQL中有一个
REPLACE
语句,它完全符合我的要求,但它只适用于MySQL,所以本地解决方案不能fit@NikitaVolkov你只会有一个局部解决方案。即使使用公共语法,例如update后跟条件插入,也必须考虑不同数据库之间的锁定问题,否则会导致主键冲突。例如,请参见@MartinSmith MySQL、H2、Postgres、Oracle、DB2、MSSQL、Hsql、derby。其名称为
UPSERT
。这通常是通过
MERGE
实现的,但这并不是通用的。关于“大多数数据库”,你能说得更具体些吗?@Oded什么都没有。我不知道该怎么办try@MartinSmith我知道MySQL中有一个
REPLACE
语句,它完全符合我的要求,但它只适用于MySQL,所以本地解决方案不能fit@NikitaVolkov你只会有一个局部解决方案。即使使用公共语法,例如update后跟条件插入,也必须考虑不同数据库之间的锁定问题,否则会导致主键冲突。请看,例如,.@MartinSmith MySQL、H2、Postgres、Oracle、DB2、MSSQL、Hsql、derby,您能更具体一点吗?例如,如果表由两列组成:id(Pr.Key)和txt,查询会是什么样子?您能更具体一点吗?例如,如果表由两列组成:id(Pr.Key)和txt,那么查询会是什么样子呢?好吧,这是给定需求我能想到的最通用的查询。。。另一种解决方案是无论如何都尝试插入,但这意味着检测到错误是唯一的密钥约束冲突!嗯,这是我能想到的最普遍的要求。。。另一种解决方案是无论如何都尝试插入,但这意味着检测到错误是唯一的密钥约束冲突!