【问题标题】:Perform sql server insert but if duplicate found then perform update执行 sql server 插入,但如果发现重复,则执行更新
【发布时间】:2015-05-22 10:23:14
【问题描述】:

我有很多记录,我想在MYSQLMSSQL 中使用JDBC 触发批量插入查询:

我的查询是:INSERT INTO dentalitems SET itemID = ?, categoryid = ?, treatmentAreaID = ?, paintTypeID=?, procedurecode=? ON DUPLICATE KEY UPDATE itemID = ?, procedurecode = ?

上面的查询对于MYSQL 工作正常 - 它会将记录插入到表中,但如果存在重复键,那么它将执行更新。

我的问题是我也想在 SQL Server 中执行上述相同的操作,但上面的查询仅适用于 MYSQL。我搜索了一个 SQL Server 查询,但没有找到。

在我的表中,itemIDprocedurecode 是唯一的列。

如何使用 MSSQL Server 做同样的事情?

【问题讨论】:

标签: mysql sql-server jdbc


【解决方案1】:

试试这个。 表位置(LocationId INT PrimaryKey,LocationName VARCHAR)

MERGE dbo.Location AS target
USING (SELECT 100, 'Location Name') AS source (Id, Name)
    ON (target.LocationId = source.Id)
WHEN MATCHED THEN UPDATE SET LocationName = source.Name
WHEN NOT MATCHED THEN INSERT (LocationId, LocationName) VALUES (source.Id, source.Name);

->

MERGE dbo.Location AS target
USING (SELECT AId, AName FROM A) AS source (Id, Name)
    ON (target.LocationId = source.Id)
WHEN MATCHED THEN UPDATE SET LocationName = source.Name
WHEN NOT MATCHED THEN INSERT (LocationId, LocationName) VALUES (source.Id, source.Name);

【讨论】:

  • 对不起,我不明白你的意思。那么,插入或更新的数据从哪里来?
  • 我有静态数据,我想将所有记录插入表中,但如果表有特定记录,那么我想更新它。我不想在两者之间进行任何选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2010-10-18
  • 2016-07-28
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多