Sql 选择和插入(复制具有部分唯一值的行)
我想将表中的行复制到同一个表中,但更改唯一值,这样我就不会得到重复的唯一值。使用MS SQL Server 2008 表格示例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
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, '_', '')