Можно ли выбрать набор строк из таблицы и напрямую вставить их в таблицу или ту же таблицу в SQL? - PullRequest
3 голосов
/ 07 июня 2010

Привет всем, мне было просто любопытно, если бы я мог сделать что-то вроде -

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

Я просто чувствовал необходимость делать это много раз ... поэтому просто было любопытно, есть ли способ достичь этого ..

Ответы [ 3 ]

7 голосов
/ 07 июня 2010

Вы можете сделать что-то подобное, но вы не можете Select *, если хотите изменить значение столбца:

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

Это добавит 2 в качестве вашего нового employeeId.

3 голосов
/ 07 июня 2010

Вы можете использовать синтаксис 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, всестолбцы должны иметь явные имена.Этот синтаксис выдаст ошибку, если таблица 'newTable' уже существует.Эта форма очень удобна, если вы хотите быстро сделать копию таблицы, чтобы попробовать что-то.

3 голосов
/ 07 июня 2010

да перечислите столбец и делайте так

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 

после того, как вы сделали

...