当前位置:  开发笔记 > 数据库 > 正文

如何在SQL表中复制记录但是换出新行的唯一ID?

如何解决《如何在SQL表中复制记录但是换出新行的唯一ID?》经验,为你挑选了4个好方法。

这个问题接近我的需要,但我的情况略有不同.源表和目标表是相同的,主键是uniqueidentifier(guid).当我尝试这个:

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

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

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



1> AaronSieb..:

试试这个:

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

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


太棒了 像魅力一样工作。一旦你写出来,它是如此明显。谢谢!!

2> Jonas..:

好的,我知道这是一个老问题,但无论如何我都会发布我的答案.

我喜欢这个解决方案.我只需要指定标识列.

SELECT * INTO TempTable FROM MyTable_T WHERE id = 1;
ALTER TABLE TempTable DROP COLUMN id;
INSERT INTO MyTable_T SELECT * FROM TempTable;
DROP TABLE TempTable;

"id"列是标识列,这是我必须指定的唯一列.无论如何,它比其他方式更好.:-)

我使用SQL Server.你可能想在第1行和第2行使用" CREATE TABLE"和" UPDATE TABLE".嗯,我看到我并没有真正给出他想要的答案.他也希望将id复制到另一列.但是这个解决方案很适合用新的auto-id制作副本.

我用Michael Dibbets的idéas编辑我的解决方案.

use MyDatabase; 
SELECT * INTO #TempTable FROM [MyTable] WHERE [IndexField] = :id;
ALTER TABLE #TempTable DROP COLUMN [IndexField]; 
INSERT INTO [MyTable] SELECT * FROM #TempTable; 
DROP TABLE #TempTable;

您可以通过用","分隔多个列来删除它们.:id应替换为要复制的行的id.MyDatabase,MyTable和IndexField应该替换为您的名字(当然).


+1表示不必列出所有列
对于`TempTable`,使用`#TempTable`不是更好,所以它是一个真正的临时表吗?
我使用以下格式`使用MyDatabase; SELECT*INTO #TempTable FROM [TABLE] WHERE [indexfield] =:id; ALTER TABLE #TempTable DROP COLUMN [indexfield]; INSERT INTO [TABLE] SELECT*FROM #TempTable; DROP TABLE #TempTable;`这样我就知道它会在没有任何延迟的情况下被清理干净,不会将间歇文件写入光盘.
如果您不想对您的标识列名称进行硬编码,也可以使用`$ identity`

3> Matt Hinze..:

我猜你在试图避免写出所有的列名.如果您正在使用SQL Management Studio,则可以轻松地右键单击表格和脚本为插入...然后您可以使用该输出来创建查询.



4> 小智..:

指定除ID字段之外的所有字段.

INSERT INTO MyTable (FIELD2, FIELD3, ..., FIELD529, PreviousId)
SELECT FIELD2, NULL, ..., FIELD529, FIELD1
FROM MyTable
WHERE FIELD1 = @Id;

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有