INSERT INTO SELECT * for SQL Server,不可能,我是否正确?

时间:2014-11-12 11:56:51

标签: sql-server sql-server-2008

使用SQL Server 2008 R2

显然可以做到

INSERT INTO Table1 SELECT * FROM Table1 where Id=1234

请参阅:W3Schools

但在SQL Server中,这不起作用。我是否认为SQL Server不支持上述INSERT语句,并且需要专门指定列。

感谢。

修改

上面的SQL不完整,现已更正

2 个答案:

答案 0 :(得分:5)

您错过了要插入的表格的名称

insert into destination_table
select * from source_table

当然这仅适用于具有相同列的表。如果您只想插入特定列,则还需要指定它们

insert into destination_table (col1, col2)
select col7, col3 from source_table

答案 1 :(得分:3)

如果您只是尝试从具有主键(IDENTITY列)的表中复制行,则无法使用以下语法:

INSERT INTO Table1 SELECT * FROM Table1 where Id=1234

这会违反唯一的主键值,因为它会尝试插入重复的IDENTITY。

相反,选择除IDENTITY之外的所有列,假设使用此架构:

Table1
------
ID
Col1
Col2
Col3

你会这样做,IDENTITY会自动为你增加:

INSERT INTO Table1 (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM Table1 
WHERE Id=1234