【发布时间】:2013-03-04 00:51:51
【问题描述】:
我想将表中的行复制到同一个表,但更改唯一值(所以我不会得到唯一值的重复)。使用 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 数据类型。
现在我要做的是选择这些行并插入它们(就像复制粘贴 ish 一样),但我想保留 _YYYY、_TTTT 和 _WWWW(它们是替换的,并且对于每个 X 或 Z ID 都是唯一的-这意味着 _TTTT 可以与 _YYYY 相同,因为 X 和 Z 不同)在 ID 列中,但使新的 XXXXXXXXXXXXXXX 和 ZZZZZZZZZZZZZZ 成为 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。
【问题讨论】:
-
你能发布预期的输出吗?
-
你能改变桌子的设计吗?如果是,则将表 ID 拆分为两列。根据您的描述,在我看来,该表并未完全标准化。如果没有,您可以使用带有
newid()的 GUID 作为 ID 的第一部分
标签: sql sql-server-2008 select insert unique