Odpowiedzi:
W rzeczywistości instrukcja insert ma do tego odpowiednią składnię. O wiele łatwiej jest jednak podać nazwy kolumn zamiast wybierać „*”:
INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...
Lepiej to wyjaśnię, ponieważ z jakiegoś powodu ten post otrzymuje kilka głosów negatywnych.
Składnia INSERT INTO ... SELECT FROM jest stosowana, gdy tabela, do której wstawiasz („nowa_tabela” w moim przykładzie powyżej) już istnieje. Jak powiedzieli inni, składnia SELECT ... INTO służy do tworzenia nowej tabeli jako części polecenia.
Nie określiłeś, czy nowa tabela ma zostać utworzona jako część polecenia, więc INSERT INTO ... SELECT FROM powinno wystarczyć, jeśli tabela docelowa już istnieje.
Spróbuj tego:
INSERT INTO newTable SELECT * FROM initial_Table
Możesz wstawić za pomocą zapytania podrzędnego w następujący sposób:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
Od tutaj:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Możesz użyć select into
oświadczenia. Zobacz więcej na W3Schools .
Jest łatwiejszy sposób, w którym nie musisz wpisywać żadnego kodu (idealny do testowania lub jednorazowych aktualizacji):
Krok 1
Krok 2
Krok 3
Krok 4
Krok 5
Uwaga - 1 : Jeśli kolumny nie są w odpowiedniej kolejności, jak w tabeli docelowej, zawsze możesz wykonać krok 2 i wybrać kolumny w tej samej kolejności, jak w tabeli docelowej
Uwaga - 2 - Jeśli masz kolumny tożsamości, wykonaj, SET IDENTITY_INSERT sometableWithIdentity ON
a następnie wykonaj powyższe kroki, a na końcu wykonajSET IDENTITY_INSERT sometableWithIdentity OFF
Jeśli przenosisz dużo danych na stałe, tj. Nie zapełniasz tabeli tymczasowej, polecam użycie SQL Server Import / Export Data do mapowania tabeli na tabelę.
Narzędzie importu / eksportu jest zwykle lepsze niż zwykły SQL, gdy masz konwersje typów i możliwe obcięcie wartości w mapowaniu. Ogólnie rzecz biorąc, im bardziej złożone jest mapowanie, tym wydajniej używasz narzędzia ETL, takiego jak Integration Services (SSIS), zamiast bezpośredniego języka SQL.
Narzędzie importu / eksportu jest w rzeczywistości kreatorem SSIS i możesz zapisać swoją pracę jako pakiet dtsx.
Myślę, że to stwierdzenie może zrobić, co chcesz.
INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);
Dim ofd As New OpenFileDialog
ofd.Filter = "*.mdb|*.MDB"
ofd.FilterIndex = (2)
ofd.FileName = "bd1.mdb"
ofd.Title = "SELECCIONE LA BASE DE DATOS ORIGEN (bd1.mdb)"
ofd.ShowDialog()
Dim conexion1 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd.FileName
Dim conn As New OdbcConnection()
conn.ConnectionString = conexion1
conn.Open()
'EN ESTE CODIGO SOLO SE AGREGAN LOS DATOS'
Dim ofd2 As New OpenFileDialog
ofd2.Filter = "*.mdb|*.MDB"
ofd2.FilterIndex = (2)
ofd2.FileName = "bd1.mdb"
ofd2.Title = "SELECCIONE LA BASE DE DATOS DESTINO (bd1.mdb)"
ofd2.ShowDialog()
Dim conexion2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd2.FileName
Dim conn2 As New OdbcConnection()
conn2.ConnectionString = conexion2
Dim cmd2 As New OdbcCommand
Dim CADENA2 As String
CADENA2 = "INSERT INTO EXISTENCIA IN '" + ofd2.FileName + "' SELECT * FROM EXISTENCIA IN '" + ofd.FileName + "'"
cmd2.CommandText = CADENA2
cmd2.Connection = conn2
conn2.Open()
Dim dA2 As New OdbcDataAdapter
dA2.SelectCommand = cmd2
Dim midataset2 As New DataSet
dA2.Fill(midataset2, "EXISTENCIA")