Sql Update查询将现有表中的列更新为具有重复值的唯一值

时间:2013-01-16 10:29:18

标签: sql-server-2008

我有一个名为Script的现有表,其中有许多脚本,其中包含唯一的脚本ID和非唯一的脚本名称。此表中有许多记录。 现在作为我当前开发的一部分,我已经使脚本名称变得独一。当一些主体通过UI上传脚本时,此表被填充。现在对于已经存在的脚本,脚本名称列中的值的重复没有限制。所以它有很多重复的记录。 现在我想给所有现有的脚本名称,添加一些后缀的唯一名称。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

类似的东西:

declare @T table (script_id int not null IDENTITY(1,1) primary key,
                 script_name varchar(30) not null)
insert into @T (script_name) values
('a'),('b'),('c'),('d'),('b'),('a'),('e'),('c'),('b');

;with Ordered as (
    select *,
      ROW_NUMBER() OVER (PARTITION BY script_name ORDER by script_id) as rn
    from @T
)
update Ordered set script_name = script_name +
    CASE WHEN rn > 1 THEN '_' + CONVERT(varchar(10),rn) ELSE '' END

select * from @T

结果:

script_id   script_name
----------- ------------------------------
1           a
2           b
3           c
4           d
5           b_2
6           a_2
7           e
8           c_2
9           b_3