如何将一行从一个SQL Server表复制到另一个


91

我有两个相同的表,需要将表中的行复制到另一个表中。最好的方法是什么?(我需要以编程方式仅复制几行,而无需使用批量复制实用程序)。

Answers:


120

只要没有标识列,您就可以

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
请谨慎使用此语法,因为如果Table2具有标识列,该语法将不起作用,并且如果Table1在不更改Table2同步更改的情况下进行更改(将来将我烧死),它将在将来中断。仅注意这些注意事项,该解决方案对于您的情况可能是完美的。
Michael Haren

11
您可以使用SET IDENTITY_INSERT < table > ON(和SET IDENTITY_INSERT < table > OFF)来暂时禁用您要插入到的表上的标识列。为我工作,试图恢复数据集中的一些缺失记录。
nickb

1
如果表1中的主键作为外键存在于表2中怎么办?我有同样的事情,我不知道该怎么办..在表2 id外键AS“ Technology_idTechnology”中,在表1中,它是“ idTechnology”,我要将表1中的所有条目复制到table2,当idTechnology在两个表中都匹配时。.–
ZelelB

71

替代语法:

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...

选择查询可以(当然)包括表达式,case语句,常量/文字等。


2
当表格略有不同时,这很棒。我在第二张表中还有一些额外的列,并且可接受的答案不适用于MSSQL,因为它们需要相同。
Tony M

39

Jarrett的答案将创建一个新表。

Scott的答案将插入具有相同结构的现有表中。

您也可以插入具有不同结构的表中:

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]

6
@ScottStonehouse:如果像您一样将所有其他答案收集到该答案中,但是使用代码(使其更加全面),您肯定会成为最佳答案。
Michael Haren

6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

在SQL Server中工作


2
这仅在DestTable不存在时有效。如果在此查询之前创建了DestTable,则会收到错误消息。
网络开发人员

2
实际上,如果目标表不存在,它将失败。如果现有DestTable不为空,则可能会导致错误。
Kaniu '16

5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >

1
如果这两个表位于sql-server的diff数据库中,则有任何方法可以执行此操作。
Naresh

9
当然!只需完全限定数据库即可。[服务器名称]。[架构]。[表格]。例如SELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
Jarrett Meyer

4
这将创建一个新表,这不是OP所要求的。
康拉德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.