Ответы:
Оператор вставки на самом деле имеет синтаксис для этого. Намного проще, если вы укажете имена столбцов, а не выбираете «*»:
INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...
Я лучше проясню это, потому что по какой-то причине этот пост получил несколько голосов против.
Синтаксис INSERT INTO ... SELECT FROM предназначен для случаев, когда таблица, в которую вы вставляете («new_table» в моем примере выше), уже существует. Как говорили другие, синтаксис SELECT ... INTO предназначен для случаев, когда вы хотите создать новую таблицу как часть команды.
Вы не указали, нужно ли создавать новую таблицу как часть команды, поэтому INSERT INTO ... SELECT FROM подойдет, если ваша целевая таблица уже существует.
Попробуй это:
INSERT INTO newTable SELECT * FROM initial_Table
Вы можете вставить с помощью подзапроса следующим образом:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
От сюда:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Вы можете использовать select into
заявление. Смотрите больше на W3Schools .
Есть более простой способ, при котором вам не нужно вводить код (идеально подходит для тестирования или одноразовых обновлений):
Шаг 1
Шаг 2
Шаг 3
Шаг 4
Шаг 5
Примечание - 1 : если столбцы расположены не в правильном порядке, как в целевой таблице, вы всегда можете выполнить шаг 2 и выбрать столбцы в том же порядке, что и в целевой таблице
Примечание - 2 - Если у вас есть столбцы Identity, выполните, SET IDENTITY_INSERT sometableWithIdentity ON
а затем выполните указанные выше шаги, а в конце выполнитеSET IDENTITY_INSERT sometableWithIdentity OFF
Если вы постоянно переносите много данных, то есть не заполняете временную таблицу, я бы рекомендовал использовать SQL Server Import / Export Data. для сопоставления таблиц с таблицами.
Инструмент импорта / экспорта обычно лучше, чем простой SQL, когда у вас есть преобразования типов и возможное усечение значений в вашем отображении. Как правило, чем сложнее ваше сопоставление, тем более продуктивно вы используете инструмент ETL, такой как службы интеграции (SSIS), вместо прямого SQL.
Инструмент импорта / экспорта на самом деле является мастером SSIS, и вы можете сохранить свою работу как пакет dtsx.
Я думаю, это заявление может сделать то, что вы хотите.
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")