【问题标题】:SQL Server : check for existing entry before UPDATE [duplicate]SQL Server:在更新之前检查现有条目 [重复]
【发布时间】:2014-06-27 01:07:30
【问题描述】:

我正在合并表格中的错误条目。专门针对此在线商店有制造商及其商品编号。有时制造商会被创建两次,使用两个不同的名称,例如“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

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

违反主键约束“ESO$Manufacturer Item$0”。无法在对象“dbo.ESO$Manufacturer Item”中插入重复键。

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

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

【问题讨论】:

  • 你好。我不太明白。您能否发布表格架构以便我们跟进?
  • 我们基本上有一张表,上面有[Manufacturer Code],[Manufacturers Item No_]
  • 请添加表结构。
  • 这不是重复的,这是一个不同的问题。逻辑不一样

标签: sql sql-server database


【解决方案1】:

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

/** 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;

【讨论】:

    【解决方案2】:

    首先您必须删除重复记录。 以下脚本将删除重复项。 (根据给定的信息)

    DELETE FROM [ESO65].[dbo].[ESO$Manufacturer Item] AS DeleteItem
    WHERE DeleteItem.[Manufacturer Code] = @old
    AND DeleteItem.[Manufacturer Item] IN
    (
      -- SELECT DUPLICATES
      SELECT DuplicateItem.[Manufacturer Item]
      FROM [ESO65].[dbo].[ESO$Manufacturer Item] AS DuplicateItem
      WHERE (DuplicateItem.[Manufacturer Code] = @old OR DuplicateItem.[Manufacturer Code] = @new)
      GROUP BY DuplicateItem.[Manufacturer Item]
      HAVING COUNT(*)>1
    )
    

    然后你就可以运行你的更新脚本了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2013-06-30
      • 2012-01-23
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多