--生成测试数据
create table #t(id int identity(1,1),name varchar(20))
insert into #t(name) select 'aaab'
insert into #t(name) select 'aaac'
insert into #t(name) select 'aaad'
insert into #t(name) select 'aaae'
insert into #t(name) select 'aaaf'
insert into #t(name) select 'aaab'
insert into #t(name) select 'aaac'
insert into #t(name) select 'aaad'
insert into #t(name) select 'aaae'
insert into #t(name) select 'aaab'
insert into #t(name) select 'aaac'
insert into #t(name) select 'aaad'
insert into #t(name) select 'aaae'
insert into #t(name) select 'aaae'
insert into #t(name) select 'aaae'
insert into #t(name) select 'aaag'--执行更新操作
update a
set
    a.name = a.name + char(96+(select count(*) from #t where id<=a.id and name=a.name))
from
    #t a
where
    exists(select 1 from #t where name=a.name and id!=a.id)
--查看更新结果
select * from #t
--输出结果
id     name
---    -----
1      aaaba
2      aaaca
3      aaada
4      aaaea
5      aaafa
6      aaabb
7      aaacb
8      aaadb
9      aaaeb
10     aaabc
11     aaacc
12     aaadc
13     aaaec
14     aaaed
15     aaaee
16     aaag

解决方案 »

  1.   

    可以在'a'后边加数字,比如
    id     name
    ---    ------
    1      aaaba1
    2      aaaca1
    3      aaada1
    4      aaaea1
    5      aaafa1
    6      aaaba2
    7      aaaca2
    8      aaada2
    9      aaaea2
    10     aaaba3
    11     aaaca3
    ...
      

  2.   

    我写的,给我的同事,同事说还是提示“select 附近有语法错误”,帮我看看错误在哪里?UPDATE a
    SET a.material_name = a.material_name + char(65) + str
              (SELECT COUNT (*)
             FROM MD_MATERIAL
             WHERE row_id <= a.row_id AND material_name = a.material_name)
    FROM MD_MATERIAL a
    WHERE EXISTS
              (SELECT 1
             FROM MD_MATERIAL
             WHERE material_name = a.material_name AND row_id != a.row_id)
      

  3.   

    --try 半角没换过来!!
    UPDATE a
    SET a.material_name = a.material_name + char(65) + str
              (SELECT COUNT (*)
             FROM MD_MATERIAL
             WHERE row_id <= a.row_id AND material_name = a.material_name)
    FROM MD_MATERIAL a
    WHERE EXISTS
              (SELECT 1
             FROM MD_MATERIAL
             WHERE material_name = a.material_name AND row_id != a.row_id)
      

  4.   

    感谢 libin_ftsafe(子陌红尘)兄,在你的帮助下文体解决了,可以回家了。
      

  5.   

    这儿还有一个写法哈!,表就是用的libin_ftsafe(子陌红尘)兄的哈!!update #t
    set #t.name=Ta.newname
    from #t,
    (
     select id,name+'-'+char(96+
             (select count(1) from #t where #t.name=A.name and #t.id <=A.id)) as newname
     from #t A
    ) Ta
    where #t.id=Ta.id