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

时间:2013-03-15 10:37:41

标签: 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
ZZZZZZZZZZZZZZZ_YYYY    Something Else  1   01DAF   Random value

没有任何列具有任何键,并且所有列都是Varchar数据类型。

现在我想做的是选择theese行并插入它们(就像复制粘贴那样)但我想保留_YYYY,_TTTT和_WWWW(它们是替换品,并且对于每个X或Z ID都是唯一的 - 这意味着_TTTT可以与_YYYY相同,因为X和Z是不同的,但是在ID列中创建新的XXXXXXXXXXXXXXX和ZZZZZZZZZZZZZZZ部分。此外,我想更改NAME,因为它必须是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。

1 个答案:

答案 0 :(得分:0)

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

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

如果你可以改变那个表设计,你应该真的这样做,例如为ID创建INT类型列,添加主键约束等。