SQL 服务器 : check for existing entry before UPDATE

标签 sql sql-server database

<分区>

我正在将不正确的条目合并到表格中。该在线商店专门提供制造商及其商品编号。有时制造商被创建了两次,使用两个不同的名称,例如“VHY”和“Vishay”,这应该是相同的。所以我想将其合并为一个正确的制造商。

我有以下 SQL 语句:

/** Old Manufacturer Name **/
DECLARE @old varchar(100) = 'VHY';
/** New Manufacturer Name **/
DECLARE @new varchar(100) = 'VISHAY';

/** Updating the table **/
UPDATE [ESO65].[dbo].[ESO$Manufacturer Item]
SET [Manufacturer Code] = @new
WHERE [Manufacturer Code] = @old

不幸的是我收到了错误信息:

Violation of PRIMARY KEY constraint 'ESO$Manufacturer Item$0'. Cannot insert duplicate key in object 'dbo.ESO$Manufacturer Item'.

这是因为存在重复条目,其中 Manufacturer Code = VHY, Manufacturers Item No_= TESTManufacturer Code = Vishay, Manufacturers Item No_= TEST。所以这是重复对象违规。

如何删除存在重复条目的旧条目,然后将旧条目重命名为新条目?

enter image description here

最佳答案

此脚本只会删除现有条目。为更新腾出空间

/** Old Manufacturer Name **/
DECLARE @old varchar(100) = 'VHY';
/** New Manufacturer Name **/
DECLARE @new varchar(100) = 'VISHAY';    

BEGIN TRANSACTION t
  DELETE t1
  FROM [ESO$Manufacturer Item] t1
  JOIN [ESO$Manufacturer Item] t2
  on t1.[Manufacturer Code] = @old and 
  t2.[Manufacturer Code] = @new
  and t1.[Manufacturers Item No_] = t2.[Manufacturers Item No_]

  UPDATE [ESO$Manufacturer Item]
  SET [Manufacturer Code] = @new
  WHERE [Manufacturer Code] = @old
COMMIT TRAN T;

关于SQL 服务器 : check for existing entry before UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562126/

相关文章:

mysql - 如何从列中删除回车符和换行符?

java - SQL 性能 : Multiple Binds or Bind to One SQL Variable for Re-use?

c# - EF DBContext 处理不关闭连接

database - XBOX 360 XNA 连接到 sql server

php - 当达到表中的时间时更新 mysql

mysql - 查询重复记录mysql

SQL Server 解析 JSON 来更新另一个表

php - 为什么代码没有进入 `if`子句?

sql - 如何将数据库中的所有 sql server management studio 事件作为可执行的 mssql 日志获取?

MySQL十进制(24,16)产生奇怪的结果