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 数据类型。

现在我想做的是选择这些行并插入它们(就像复制粘贴一样),但我想保留 _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”部分是为了能够选择我要复制的名称(大多数时候超过 5 个)。

所以我需要的帮助是为每个名称创建新的唯一 XXXXXXXXXXXXXXX 和 ZZZZZZZZZZZZZZZ ID。

4

1 回答 1

0

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

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

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

于 2013-03-15T11:27:05.913 回答