あなたはそれに応じて値を変更するには、重複して更新可能CTEを見つけるために、OVER()
句のPARTITION BY
でROW_NUMBER
を使用することができます。
DECLARE @dummyTable TABLE(ID INT IDENTITY, UserName VARCHAR(100));
INSERT INTO @dummyTable VALUES('Peter'),('Tom'),('Jane'),('Victoria')
,('Peter') ,('Jane')
,('Peter');
WITH UpdateableCTE AS
(
SELECT t.UserName AS OldValue
,t.UserName + CASE WHEN ROW_NUMBER() OVER(PARTITION BY UserName ORDER BY ID)=1 THEN '' ELSE '_duplicate' END AS NewValue
FROM @dummyTable AS t
)
UPDATE UpdateableCTE SET OldValue = NewValue;
SELECT * FROM @dummyTable;
結果
ID UserName
1 Peter
2 Tom
3 Jane
4 Victoria
5 Peter_duplicate
6 Jane_duplicate
7 Peter_duplicate
あなたはROW_NUMBER()
などが含まれる場合があります重複序数を見つける別の列。 1
で番号が付けられた最も早い(または現在のものでなければならない)ソート条項がある場合は、重複を見つけて修正するのが簡単です。
この混乱をきれいにしたら、新しいダンプを取得しないようにする必要があります。しかし、あなたはすでにこれを知っています: - D
あなたは重複を特定しましたか?ご質問はありますか? –