Risposte:
L'istruzione insert in realtà ha una sintassi per fare proprio questo. È molto più semplice se specifichi i nomi delle colonne anziché selezionare "*":
INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...
Chiarirei meglio questo perché per qualche motivo questo post sta ottenendo alcuni voti negativi.
La sintassi INSERT INTO ... SELECT FROM è per quando la tabella che stai inserendo ("new_table" nel mio esempio sopra) esiste già. Come altri hanno già detto, la sintassi SELECT ... INTO è per quando si desidera creare la nuova tabella come parte del comando.
Non hai specificato se la nuova tabella deve essere creata come parte del comando, quindi INSERT INTO ... SELECT FROM dovrebbe andare bene se la tabella di destinazione esiste già.
Prova questo:
INSERT INTO newTable SELECT * FROM initial_Table
È possibile inserire una query secondaria come segue:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
Da qui:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Puoi usare una select into
dichiarazione. Scopri di più su W3Schools .
Esiste un modo più semplice in cui non è necessario digitare alcun codice (ideale per i test o gli aggiornamenti di una volta):
Passo 1
Passo 2
Passaggio 3
Passaggio 4
Passaggio 5
Nota - 1 : se le colonne non sono nell'ordine corretto come nella tabella Target, puoi sempre seguire il Passaggio 2 e selezionare le colonne nello stesso ordine della tabella Target
Nota - 2 - Se si dispone di colonne Identity, eseguire SET IDENTITY_INSERT sometableWithIdentity ON
e quindi seguire i passaggi precedenti e alla fine eseguireSET IDENTITY_INSERT sometableWithIdentity OFF
Se si trasferiscono molti dati in modo permanente, ovvero non si popola una tabella temporanea, si consiglia di utilizzare i dati di importazione / esportazione di SQL Server per i mapping da tabella a tabella.
Lo strumento di importazione / esportazione è in genere migliore di SQL semplice quando si hanno conversioni di tipo e possibili troncamenti di valore nella mappatura. In generale, più complessa è la mappatura, più produttiva si utilizza uno strumento ETL come Integration Services (SSIS) invece di SQL diretto.
Lo strumento di importazione / esportazione è in realtà una procedura guidata SSIS ed è possibile salvare il proprio lavoro come pacchetto dtsx.
Penso che questa affermazione potrebbe fare quello che vuoi.
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")