Скопируйте данные в другую таблицу


154

Как скопировать / добавить данные из одной таблицы в другую таблицу с той же схемой в SQL Server?

Редактировать:

скажем, есть запрос

select * 
into table1 
from table2 
where 1=1 

который создает table1с той же схемой и данными, что и в table2.

Есть ли такой короткий запрос, чтобы копировать только данные целиком в уже существующую таблицу?


Только для полной информации, будьте осторожны, эти команды НЕ копируют индексы и триггеры таблицы! См. Следующий пост для копирования индексов и сценариев триггеров: stackoverflow.com/questions/7582852/…
— HausO

Как это решить? INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

Ответы:


310

Если обе таблицы действительно имеют одинаковую схему:

INSERT INTO newTable
SELECT * FROM oldTable

В противном случае вам придется указать имена столбцов (список столбцов для newTableнеобязателен, если вы указываете значение для всех столбцов и выбираете столбцы в том же порядке, что newTableи схема):

INSERT INTO newTable (col1, col2, col3)
SELECT column1, column2, column3
FROM oldTable

1
Что делать, если я хочу ввести blank dataдля некоторого столбца?
— Худ

3
@coder это просто предложение select, поэтому вы можете поместить в него все, что захотите, включая явные NULLs, строковые константы, выражения или даже подзапросы.
— жк.

почему это не работаетINSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

1
@AbdullahNurum Поскольку ваш скалярный запрос выбирает более одного столбца. См. Stackoverflow.com/questions/4141370/… и stackoverflow.com/questions/6254913/…
— lc.

1
Если в обеих таблицах представлена ​​сходная схема, но в YES есть столбец с «Спецификацией идентификации», оператору SQL необходимо перечислить все столбцы, кроме столбца с Спецификацией идентификации.
— Габриэль Мариус Попеску

18

Это правильный способ сделать это:

INSERT INTO destinationTable
SELECT * FROM sourceTable

16

Простой способ, если новая таблица не существует, и вы хотите сделать копию старой таблицы со всем, тогда следующие действия в SQL Server.

SELECT * INTO NewTable FROM OldTable




4
INSERT INTO DestinationTable(SupplierName, Country)
SELECT SupplierName, Country FROM SourceTable;

Имена столбцов не обязательно должны быть одинаковыми.


3

Вставить выбранный столбец с условием

INSERT INTO where_to_insert (col_1,col_2) SELECT col1, col2 FROM from_table WHERE condition;

Скопируйте все данные из одной таблицы в другую с тем же именем столбца.

INSERT INTO where_to_insert 
SELECT * FROM from_table WHERE condition;

0
CREATE TABLE `table2` LIKE `table1`;
INSERT INTO `table2` SELECT * FROM `table1`;

первый запрос создаст структуру из table1to, table2а второй запрос поместит данные из table1to вtable2

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.