Sql 更新表中的重复字段

Sql 更新表中的重复字段,sql,sql-server,tsql,sql-server-2008-r2,sql-update,Sql,Sql Server,Tsql,Sql Server 2008 R2,Sql Update,我有大约100000条记录的表。我需要像这样更新相同的字段。 例如,这是我的桌子 id name 1 sss 2 bbb 3 ccc 4 avg 5 bbb 6 bbb 7 sss 8 mmm 9 avg 执行脚本后,我需要获取 id name 1 sss 2 bbb 3 ccc 4 avg 5 bbb-5 6 bbb-6 7

我有大约100000条记录的表。我需要像这样更新相同的字段。 例如,这是我的桌子

id     name
 1     sss
 2     bbb
 3     ccc
 4     avg
 5     bbb
 6     bbb
 7     sss
 8     mmm
 9     avg
执行脚本后,我需要获取

id     name
 1     sss
 2     bbb
 3     ccc
 4     avg
 5     bbb-5
 6     bbb-6
 7     sss-7
 8     mmm
 9     avg-9

我如何才能做到这一点?

使用
CTE

WITH greaterRecord 
AS 
(
    SELECT  id, 
            name, 
            ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) RN
    FROM    TableName
)
UPDATE greaterRecord
SET    name = name + '-' + CAST(id AS VARCHAR(10))
WHERE  RN > 1
这是适用于大多数RDBMS的常见查询

UPDATE  a
SET     a.Name = a.Name + '-' + CAST(ID AS VARCHAR(10))
FROM    tableName a
        LEFT JOIN
        (
            SELECT  MIN(ID) min_ID, name
            FROM    tableName
            GROUP   BY name
        ) b ON  a.name = b.name AND
                a.ID = b.Min_ID
WHERE   b.Name IS NULL
执行update语句后的输出

╔════╦═══════╗
║ ID ║ NAME  ║
╠════╬═══════╣
║  1 ║ sss   ║
║  2 ║ bbb   ║
║  3 ║ ccc   ║
║  4 ║ avg   ║
║  5 ║ bbb-5 ║
║  6 ║ bbb-6 ║
║  7 ║ sss-7 ║
║  8 ║ mmm   ║
║  9 ║ avg-9 ║
╚════╩═══════╝
这应该做到:

;WITH CTE AS 
(
    SELECT  id, 
            name, 
            RN = ROW_NUMBER() OVER(PARTITION BY name ORDER BY id)
    FROM YourTable
)
UPDATE CTE
SET name = name + '-' + CAST(id AS VARCHAR(8))
WHERE RN > 1