This question接近我需要的,但我的情况略有不同.源表和目标表相同,主键是唯一标识符(guid).当我try 这个:

insert into MyTable
    select * from MyTable where uniqueId = @Id;

很明显,我违反了主键约束,因为我试图复制主键.实际上,我根本不想复制主键.相反,我想创建一个新的.此外,我希望有 Select 地复制某些字段,并将其他字段保留为空.为了让事情变得更复杂,我需要获取原始记录的主键,并将其插入副本中的另一个字段(PreviousId字段).

我相信有一个简单的解决方案,我只是不知道足够的TSQL来知道它是什么.

推荐答案

试试这个:


insert into MyTable(field1, field2, id_backup)
    select field1, field2, uniqueId from MyTable where uniqueId = @Id;

任何未指定的字段都应接收其默认值(未定义时通常为空).

Sql相关问答推荐

Postgres从组中 Select 具有相反排序顺序的行

神秘的日期转换

获取家谱树中第一次出现的特定信息,然后停止

PostgreSQL:获取每家店铺收入最高的员工

使用交叉应用透视表在SQL中转换分段时间段&

无效和不匹配的计数

将主表与历史表连接以获取主表的当前汇率以及历史表中的上一个和最后一个汇率

如何计算一个用户S的日常连胜?

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

如何计算给定日期前三个月的值以及月初数据?

如何在Postgres中为单值输入多行?

在子窗口SQL Presto中使用特定条件执行值计数

如何使子查询在UPDATE语句期间获得最新更新

从JSON值数组创建扁平数组Athena

SQL 多个不满足的条件失败

为 sqlite 全文搜索 (fts) 创建触发器时出现虚拟表的不安全使用

连续期间的缺口

忽略与给定列匹配的行的 LAG 函数

在 SQL 的每行选项中 Select 最大值

将单行中的多个行值转换为列