2008-09-11 77 views

回答

92

只要没有标识列你可以

INSERT Table2 
SELECT * FROM Table1 
WHERE [Conditions] 
+19

注意这个语法,因为如果Table2有一个标识列,它将不会工作,并且如果Table1在没有同步更改的情况下更改(以前刻录过),它将在未来中断。这种解决方案可能适合您的情况,请注意这些考虑因素。 – 2009-07-31 12:00:09

+8

您可以使用`SET IDENTITY_INSERT < table > ON`(和`SET IDENTITY_INSERT < table > OFF`)以临时禁用您尝试插入的表上的标识列。为我尝试恢复数据集中间的一些缺失记录。 – nickb 2011-12-14 11:42:02

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

有没有办法做到这一点。如果这两个表是在SQL服务器数据库差异。 – Naresh 2011-06-03 17:01:14

+9

当然!只需完全限定数据库。 [服务器]。[模式] [表]。例如`SELECT * INTO [SQLTEST]。[dbo]。[EMPLOYEES] FROM [SQLPROD]。[dbo]。[EMPLOYEES]` – 2011-06-06 11:07:03

+3

这创建了一个新表,这不是OP所要求的。 – Conrad 2015-02-04 15:18:56

62

替代语法:

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

的选择查询(当然)可以包括表情,case语句,常数/文字等

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

在SQL Server中工作

33

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

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

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

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