Skopiuj dane do innej tabeli


154

Jak skopiować / dołączyć dane z jednej tabeli do innej tabeli z tym samym schematem w SQL Server?

Edytować:

powiedzmy, że jest zapytanie

select * 
into table1 
from table2 
where 1=1 

który tworzy table1z tym samym schematem i danymi jak w table2.

Czy jest jakieś krótkie zapytanie, takie jak to, aby skopiować całe dane tylko do już istniejącej tabeli?


Aby uzyskać pełne informacje, uważaj, aby polecenia NIE kopiowały indeksów i wyzwalaczy tabeli! Zobacz następujący post dotyczący kopiowania indeksów i skryptu wyzwalającego: stackoverflow.com/questions/7582852/…
HausO

Jak to rozwiązać? INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

Odpowiedzi:


310

Jeśli obie tabele są naprawdę tym samym schematem:

INSERT INTO newTable
SELECT * FROM oldTable

W przeciwnym razie będziesz musiał określić nazwy kolumn (lista kolumn newTablejest opcjonalna, jeśli określasz wartość dla wszystkich kolumn i wybierasz kolumny w tej samej kolejności, co newTableschemat):

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

1
co jeśli chcę wejść blank datado jakiejś kolumny ??
hud

3
@coder to tylko klauzula wyboru, więc możesz umieścić w niej wszystko, co chcesz, w tym jawne NULLs, stałe łańcuchowe, wyrażenia, a nawet podzapytania.
lc.

dlaczego to nie działaINSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

1
@AbdullahNurum Ponieważ twoje zapytanie skalarne wybiera więcej niż jedną kolumnę. Zobacz stackoverflow.com/questions/4141370/… i stackoverflow.com/questions/6254913/…
lc.

1
Jeśli obie tabele przedstawiają podobny schemat, ale istnieje kolumna z „Specyfikacją tożsamości” na TAK, instrukcja SQL musi wyliczyć wszystkie kolumny, z wyjątkiem kolumny ze Specyfikacją tożsamości.
Gabriel Marius Popescu

18

Oto właściwy sposób:

INSERT INTO destinationTable
SELECT * FROM sourceTable

16

Prosty sposób, jeśli nowa tabela nie istnieje i chcesz zrobić kopię starej tabeli ze wszystkim, a następnie działa w SQL Server.

SELECT * INTO NewTable FROM OldTable

11
INSERT INTO table1 (col1, col2, col3)
SELECT column1, column2, column3
FROM table2                                        

9

Spróbuj tego:

INSERT INTO MyTable1 (Col1, Col2, Col4)
   SELECT Col1, Col2, Col3 FROM MyTable2


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

Nazwy kolumn nie są obowiązkowe, aby były takie same.


3

Wstaw wybraną kolumnę z warunkiem

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

Skopiuj wszystkie dane z jednej tabeli do drugiej o tej samej nazwie kolumny.

INSERT INTO where_to_insert 
SELECT * FROM from_table WHERE condition;

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

pierwsze zapytanie utworzy strukturę od table1do, table2a drugie zapytanie umieści dane od table1dotable2

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.