SQL Server : check for existing entry before UPDATE
本问题已经有最佳答案,请猛点这里访问。
我正在整理表中的错误条目。 特别是对于这个在线商店,有制造商和他们的文章编号。 有时制造商已经创建了两次,有两个不同的名称,例如"VHY"和"Vishay"应该是相同的。 所以我想把它合并成一个正确的制造商。
我有以下SQL语句:
1 2 3 4 5 6 7 8 9 | /** 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'.
这是因为有重复的条目,其中
如何删除旧条目的所有条目,如果有双条目,然后将旧条目重命名为新条目?
此脚本仅删除现有条目。 为更新腾出空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** 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; |
首先,您必须删除重复记录。
以下脚本将删除重复项。 (根据给定的信息)
1 2 3 4 5 6 7 8 9 10 11 | 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 ) |
然后,您可以运行更新脚本。