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


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.