Скопіюйте дані в іншу таблицю


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деякий стовпець ??
— hud

3
@coder - це лише пункт вибору, тому ви можете помістити в нього все, що завгодно, включаючи явні 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`;

перший запит створить структуру від table1до, table2а другий запит покладе дані з table1доtable2

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.