2013-03-15 128 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是不同的)在ID列中,但是創建新的XXXXXXXXXXXXXXX和ZZZZZZZZZZZZZZZ部分ID。另外我想更改名稱,因爲它必須是唯一的XXXXXXXXXXXXX ID或ZZZZZZZZZZZZZZZ ID。 (該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'部分是能夠選擇我想要複製的NAME(大部分時間超過5次)。

所以我需要的幫助是爲每個名稱創建新的唯一XXXXXXXXXXXXXXX和ZZZZZZZZZZZZZZZ ID。

+0

您可以發佈預期的輸出嗎? – 2013-03-15 11:07:57

+0

你能改變餐桌設計嗎?如果是將表格ID分成兩列。從你的描述看來,表格並沒有完全標準化。如果沒有,您可以在ID的第一部分使用帶'newid()'的GUID – Claude 2013-03-15 11:16:21

回答

0

我不知道如果我理解正確的,但你可能需要的是UPDATE

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

如果您可以更改表的設計,你要真正做到這一點,例如創建INT類型列ID,添加主鍵約束等。