0

Script という名前の既存のテーブルがあります。このテーブルには、一意のスクリプト ID と一意でないスクリプト名を持つ多くのスクリプトが存在します。このテーブルには多くのレコードがあります。現在の開発の一環として、スクリプト名を一意にしました。このテーブルは、一部のボディが UI を介してスクリプトをアップロードしたときに入力されます。現在、既に存在するスクリプトについては、スクリプト名列の値の重複に制限はありません。多くの重複レコードが存在します。ここで、既存のすべてのスクリプト名に、サフィックスを追加して一意の名前を付けたいと思います。どうすればよいですか?

4

1 に答える 1

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
于 2013-01-16T10:36:49.303 に答える