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

rp.*_*rp. 86 sql sql-server

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

Sco*_*ols 112

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

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]
Run Code Online (Sandbox Code Playgroud)

  • 请注意这种语法,因为如果Table2有一个标识列,它将无法工作,如果Table1在没有Table2同步变化的情况下发生变化(以前刻录过),它将来会中断.这个解决方案可能非常适合您的情况,请注意这些注意事项. (22认同)
  • 您可以使用`SET IDENTITY_INSERT <table> ON`(和`SET IDENTITY_INSERT <table> OFF`)来暂时禁用您尝试插入的表上的标识列.为我努力恢复数据集中间的一些缺失记录. (9认同)

Mic*_*ren 69

替代语法:

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...
Run Code Online (Sandbox Code Playgroud)

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

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

Sco*_*use 39

Jarrett的回答创建了一个新表.

Scott的答案插入到具有相同结构的现有表中.

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

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]
Run Code Online (Sandbox Code Playgroud)

  • @ScottStonehouse:如果你收集所有其他答案,就像你已经完成但是使用代码(使其全面),你肯定会成为最好的答案. (6认同)

Kan*_*niu 6

INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 
Run Code Online (Sandbox Code Playgroud)

适用于SQL Server

  • 仅当DestTable不存在时才有效.如果在此查询之前创建了DestTable,则会出现错误. (2认同)
  • 实际上,如果目标表不存在,它将失败.如果现有DestTable不为空,则可能导致错误. (2认同)

Jar*_*yer 5

SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >
Run Code Online (Sandbox Code Playgroud)

  • 当然!完全符合数据库资格.[服务器].[模式] [表].例如`SELECT*INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]` (9认同)
  • 这会创建一个新表,而不是OP要求的表. (4认同)
  • 如果这两个表位于 sql-server 的差异数据库中,有什么办法可以做到这一点吗? (2认同)