更新列和唯一键违规

时间:2013-01-14 10:22:32

标签: sql-server

我有一张表,我需要清理一列。列中的数字应如下所示:'123 4567'。但是很多数字都有这样的下划线:123_4567,我需要摆脱它。我可以使用下面的更新代码执行此操作。

唯一的问题是某些列已经存在,有或没有下划线。然后我得到一个唯一密钥违规,“代码”终止。我知道IGNORE_DUP_KEY=ON,但它不适用于我的Update语句。我也做了TRY/Catch没有成功。

IGNORE_DUP_KEY=ON工作对我来说似乎是最好的选择。然后,当找到重复的密钥时,它不会终止代码,我可以更改脚本,以便将:2添加到被忽略的其余行。

UPDATE Table  
    SET [Name] = REPLACE([Name], '_', ' ')  
    WHERE Substring([Name],4,1)='_'

1 个答案:

答案 0 :(得分:0)

这是一次性工作,对吧?我会这样做,直接在违反唯一密钥的地方添加“:2”。

UPDATE T SET 
    T.[Name] = 
        REPLACE(T.[Name], '_', ' ')  +
        CASE WHEN T2.NAME IS NOT NULL THEN ':2' ELSE '' END
FROM 
    Table T
LEFT JOIN 
    Table T2 ON T2.[Name] = REPLACE(T.[Name], '_', ' ')  
WHERE 
    Substring(T.[Name],4,1)='_'