我可以从表中选择一组行并直接将其插入到SQL中的表或同一个表中吗?

时间:2010-06-07 17:23:00

标签: sql sql-server sql-server-2008 insert

大家好我只是好奇我是否可以做类似的事情 -

insert into Employee ( Select * from Employee where EmployeeId=1)

我觉得有必要这么做很多次......所以只是好奇有没有办法实现它......

3 个答案:

答案 0 :(得分:7)

您可以执行类似的操作,但如果您想更改列值,则无法Select *

Insert into employee ( employeeId, someColumn, someOtherColumn )
  Select 2, someColumn, someOtherColumn
  From employee
  Where employeeId=1

这会将2插入您的新employeeId

答案 1 :(得分:3)

是列出列并按照那样做

insert into Employee (EmployeeId, LastName, FirstName......)
Select 600 as EmployeeId, LastName, FirstName......
from Employee where EmployeeId=1

但是,如果EmployeeId是标识列,那么您还需要执行

set identity_insert employee on 

首先

set identity_insert employee off 

完成后

答案 2 :(得分:3)

如果目标表已经存在,您可以使用INSERT INTO ... SELECT ...语法,并且只想向其追加行。只需执行SELECT部分即可轻松检查您是否选择了数据。

Insert into existingTable ( Column1, Column2, Column3, ... )
Select 1, Column2, Column3
From tableName
Where ....

您不仅限于简单选择,SELECT语句可以根据需要复杂化。此外,您不需要为所选列提供名称,因为它们将由目标表提供。 但是,如果dest表上有自动增量列,您可以从INSERT列列表中省略它们,也可以使用“set identity_insert”配置。

如果要从现有数据创建新表,则应使用SELECT ... INTO ...语法

Select 1 as Column1, Column2, Column3
Into newTable
From tableName
Where ....

同样,select可以是任意复杂的,但是,因为列名取自select语句,所有列必须具有显式名称。如果'newTable'表已存在,则此语法将出错。如果你想快速复制一个表来尝试某些东西,这个表格非常方便。