Sql server 插入SELECT*for SQL Server,不可能,是否正确?

Sql server 插入SELECT*for SQL Server,不可能,是否正确?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,使用SQLServer2008R2 显然你能做到 INSERT INTO Table1 SELECT * FROM Table1 where Id=1234 见: 但在SQL Server中,这不起作用。我认为SQLServer不支持上面的INSERT语句,需要专门指定列,这是对的 谢谢 编辑 因此,上面的SQL不完整,现在已更正您错过了要插入的表的名称 insert into destination_table select * from source_table 当然,这只适用于具有相等

使用SQLServer2008R2

显然你能做到

INSERT INTO Table1 SELECT * FROM Table1 where Id=1234
见:

但在SQL Server中,这不起作用。我认为SQLServer不支持上面的INSERT语句,需要专门指定列,这是对的

谢谢

编辑


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

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

insert into destination_table
select * from source_table
当然,这只适用于具有相等列的表。如果您只想插入特定的列,那么也需要指定它们

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

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

INSERT INTO Table1 SELECT * FROM Table1 where Id=1234
这将违反唯一主键值,因为它将尝试插入重复的标识

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

Table1
------
ID
Col1
Col2
Col3
您可以这样做,标识将自动递增:

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

我不会将W3Schools用作SQLServer的参考。尝试它非常详细,有很多例子。谢谢。我现在已经改正了。实际上,我正在尝试从同一个表中复制一条记录,而不键入所有列名。有很多。我得到“表'dbo.Table1'中标识列的显式值只能在使用列列表且identity_INSERT处于启用状态时指定”我认为这与尝试将相同的PK标识值插入新记录的PK标识列有关。您有一个列,例如自动获取值的
id
。它是唯一的键,表中的任何记录都不能有相同的数字。所以你不能只是复制一个记录。您需要从查询中保留该列并命名所有其他列。要将记录复制到同一个表中,并让DB处理Identity PK列的自动增量,唯一的方法是显式指定所有其他非PK列。谢谢。你的回答是在juergen确认这一点后才得到的。但我也很感激你的回答。