SQL Server:在UPDATE之前检查现有条目

时间:2014-05-09 10:19:10

标签: sql sql-server database

我正在整理表格中的错误条目。特别是对于这个在线商店,有制造商和他们的文章编号。有时制造商已经创建了两次,有两个不同的名称,例如" VHY"和#34; 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

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

  

违反PRIMARY KEY约束' ESO $制造商物品$ 0'。无法在对象' dbo.ESO $ Manufacturer Item'。

中插入重复键

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

如何删除旧条目中存在双重条目的所有条目,然后将旧条目重命名为新文件?

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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
)

然后您可以运行更新脚本。

答案 1 :(得分: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;