0

列をクリーンアップする必要があるテーブルがあります。列の数字は次のようになります'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)='_'
4

1 に答える 1

0

1回限りの仕事ですよね?一意のキーに違反する場所に「: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)='_'
于 2013-01-14T11:04:13.187 に答える