Sql 选择和插入(复制具有部分唯一值的行)

Sql 选择和插入(复制具有部分唯一值的行),sql,sql-server-2008,select,insert,unique,Sql,Sql Server 2008,Select,Insert,Unique,我想将表中的行复制到同一个表中,但更改唯一值,这样我就不会得到重复的唯一值。使用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 ZZZ

我想将表中的行复制到同一个表中,但更改唯一值,这样我就不会得到重复的唯一值。使用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数据类型

现在我想做的是选择这些行并像复制粘贴一样插入它们,但我想保留_yyy,_TTTT和_WWWW它们是替换项,对于每个X或Z ID都是唯一的-这意味着_TTTT可以与_YYYY相同,因为X和Z在ID列中是不同的,但将新的XXXXXXXXXXXXXXXXXXXXX和ZZZZZZZZZZZZZZZZZZ作为ID的一部分。此外,我还想更改名称,因为它必须与XXXXXXXXXXXXXXXXXXXXXX ID或ZZZZZZZZZZZZZZZZZZZZZZZZ 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”部分能够选择我要复制的名称,大多数情况下超过5次


因此,我需要的帮助是为每个名称创建新的唯一XXXXXXXXXX和ZZZZZZZZZZZZZ ID。

我不确定我是否理解正确,但您可能需要的是更新:


如果您可以更改该表的设计,那么您确实应该这样做,例如为ID创建INT-type列,添加主键约束等。

您可以发布预期的输出吗?您可以更改表的设计吗?如果是,则将表ID拆分为两列。根据您的描述,在我看来,该表没有完全规范化。如果没有,您可以使用带有newid的GUID作为ID的第一部分
UPDATE  table_name
SET     ID = REPLACE(ID, '_', '')
        , NAME = NAME + ' ' + REPLACE(ID, '_', '')