我想将表格中的行复制到同一个表中但更改唯一值(因此我不会得到唯一的重复项)。使用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。
答案 0 :(得分:0)
我不确定我是否理解正确,但您可能需要的是UPDATE
:
UPDATE table_name
SET ID = REPLACE(ID, '_', '')
, NAME = NAME + ' ' + REPLACE(ID, '_', '')
如果你可以改变那个表设计,你应该真的这样做,例如为ID创建INT
类型列,添加主键约束等。