如何复制SQL表中的记录,但换出新行的唯一ID?
时间:2020-03-06 14:53:10 来源:igfitidea点击:
这个问题接近我的需求,但是我的情况略有不同。源表和目标表是相同的,并且主键是唯一标识符(guid)。当我尝试这个:
insert into MyTable select * from MyTable where uniqueId = @Id;
我显然要违反主键约束,因为我正在尝试复制主键。实际上,我根本不想复制主键。相反,我想创建一个新的。此外,我想选择性地复制某些字段,而将其他字段保留为空。为了使事情变得更复杂,我需要获取原始记录的主键,然后将其插入副本中的另一个字段(PreviousId字段)中。
我敢肯定有一个简单的解决方案,我只是对TSQL不够了解而已。
解决方案
insert into MyTable(field1, field2, id_backup) select field1, field2, uniqueId from MyTable where uniqueId = @Id; Any fields not specified should receive their default value (which is usually NULL when not defined). Answer Specify all fields but your ID field. INSERT INTO MyTable (FIELD2, FIELD3, ..., FIELD529, PreviousId) SELECT FIELD2, NULL, ..., FIELD529, FIELD1 FROM MyTable WHERE FIELD1 = @Id;
它将生成一个新记录,并从原始记录中复制field1和field2
我猜我们正在尝试避免写出所有列名。如果我们使用的是SQL Management Studio,则可以轻松地右键单击表和"插入脚本"。然后可以将输出弄乱以创建查询。
我们可以这样:
insert into MyTable (uniqueId, column1, column2, referencedUniqueId) select NewGuid(), // don't know this syntax, sorry column1, column2, uniqueId, from MyTable where uniqueId = @Id
我们应该在表DENI / FRIEN01P中放置一个最大ID而不是112.
标题数量不匹配
标题数量不匹配
代码数量不匹配
代码数量不匹配