【问题标题】:Selecting and inserting (copying rows with partially unique values)选择和插入(复制具有部分唯一值的行)
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2012-12-06
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多