2013-03-15 95 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,添加主键约束等。