2013-03-15 3 views
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.

Теперь, что я хочу сделать, это выбрать те строки и вставить их (например, скопировать вставку ish), но я хочу сохранить _YYYY, _TTTT и _WWWW (они являются заменами и уникальны для каждого X или Z ID - это означает, что _TTTT может быть таким же, как _YYYY, так как X и Z являются разными) в столбце идентификатора, но вносят новую часть XXXXXXXXXXXXXXX и ZZZZZZZZZZZZZZ идентификатора. Также я хочу изменить ИМЯ, так как он должен быть уникальным с идентификатором XXXXXXXXXXXX или ZZZZZZZZZZZZZZ. (The X ID имеет одно имя и 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 и ZZZZZZZZZZZZZZ для каждого имени.

+0

Можете ли вы опубликовать ожидаемый результат? –

+0

Можете ли вы изменить дизайн стола? Если да, разделите идентификатор таблицы на две колонки. Из вашего описания мне кажется, что таблица не полностью нормализована. Если нет, вы можете использовать GUID с 'newid()' для первой части идентификатора – Claude

ответ

0

Я не уверен, если я правильно понял, но то, что вам может понадобиться UPDATE:

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

Если вы можете изменить этот дизайн таблицы, вы действительно должны сделать это, например, создать INT типа столбец ID, добавить ограничение первичного ключа и т. Д.

Смежные вопросы