1

テーブル内の行を同じテーブルにコピーしたいが、一意の値を変更したい (そのため、一意の重複は得られない)。MS SQL Server 2008 の使用

テーブルの例

ID                      NAME            POS TYPE    DATA
XXXXXXXXXXXXXXX_TTTT    Something Hefty 0   01DAT   2008-09-29
XXXXXXXXXXXXXXX_WWWW    Something Hefty 2   01RAT   Random txt
ZZZZZZZZZZZZZZZ_YYYY    Something Else  1   01DAF   Random value

どの列にもキーがなく、すべての列が Varchar データ型です。

今私がしたいのは、これらの行を選択して挿入することです(コピーペーストのように)が、_YYYY、_TTTT、および_WWWWを保持したい(これらは置換であり、XまたはZ IDごとに一意です-つまり、 _TTTT は、ID 列の X と Z が異なるため、_YYYY と同じにすることができますが、新しい XXXXXXXXXXXXXXX と ZZZZZZZZZZZZZZZ を ID の一部にします。また、XXXXXXXXXXXXXXX ID または ZZZZZZZZZZZZZZZ ID で一意である必要があるため、NAME を変更したいと考えています。(X ID には 1 つの名前があり、Z ID には別の名前があります。)

これが私が使用しようとしているステートメントです(完全に理解できないため、不完全です)

insert into Table_name(ID,NAME,POS,TYPE,DATA) 
select 'XXXXXXXXXXXXXXX'+substring(ID,15,5), NAME+'(Copy)',POS,TYPE,DATA 
from Table_name where NAME='Old name' or NAME='Old name 2'

「古い名前」と「古い名前 2」の部分は、コピーする名前を選択できるようにするためのものです (ほとんどの場合、5 つ以上)。

だから私が必要とする助けは、名前ごとに新しい一意の XXXXXXXXXXXXXXX と ZZZZZZZZZZZZZZZ ID を作成することです。

4

1 に答える 1

0

正しく理解できたかどうかはわかりませんが、必要になる可能性があるのは次のUPDATEとおりです。

UPDATE  table_name
SET     ID = REPLACE(ID, '_', '')
        , NAME = NAME + ' ' + REPLACE(ID, '_', '')

そのテーブルのデザインを変更できる場合は、実際にそれを行う必要があります。たとえばINT、ID のタイプ列を作成したり、主キー制約を追加したりします。

于 2013-03-15T11:27:05.913 に答える