Вставить все значения таблицы в другую таблицу в SQL

Я пытаюсь вставить все значения одной таблицы в другую. Но оператор insert принимает значения, но я бы хотел, чтобы он принял select * из initial_Table. Возможно ли это?

Ответ 1

Оператор insert фактически имеет синтаксис для этого. Это намного проще, если вы укажете имена столбцов, а не выберите "*", хотя:

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 должно быть хорошо, если ваша таблица назначения уже существует.

Ответ 2

Попробуйте следующее:

INSERT INTO newTable SELECT * FROM initial_Table

Ответ 3

Вы можете вставить, используя Sub-запрос, следующим образом:

INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value

Ответ 4

От здесь:

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename

Ответ 6

Если вы переносите много данных навсегда, то есть не заполняете временную таблицу, я бы рекомендовал использовать Экспорт/Экспорт данных SQL Server для сопоставлений таблицы-таблицы.

Инструмент импорта/экспорта обычно лучше, чем прямой SQL, когда у вас есть преобразования типов и возможное усечение значения в вашем сопоставлении. Как правило, чем сложнее ваше сопоставление, тем продуктивнее вы используете инструмент ETL, такой как Integration Services (SSIS) вместо прямого SQL.

Инструмент импорта/экспорта на самом деле является мастером SSIS, и вы можете сохранить свою работу как пакет dtsx.

Ответ 7

Существует более простой способ, при котором вам не нужно вводить код (идеально подходит для тестирования или одноразовых обновлений):

Шаг 1

  • Щелкните правой кнопкой мыши по таблице в проводнике и выберите "Изменить верхние 100 строк";

Шаг 2

  • Затем вы можете выбрать нужные строки (Ctrl + Click или Ctrl + A) и Щелкните правой кнопкой мыши и скопируйте ( Примечание. Если вы хотите добавить условие "where", щелкните правой кнопкой мыши по сетке → панель → SQL Теперь вы можете отредактировать Query и добавить условие WHERE, затем щелкните правой кнопкой мыши еще раз → Execute SQL, ваши нужные строки будут доступны для выбора внизу)

Шаг 3

  • Следуйте шагу 1 для целевой таблицы.

Шаг 4

  • Теперь перейдите в конец сетки, и последняя строка будет иметь звездочку (*) в первом столбце (эта строка должна добавить новую запись). Нажмите на это, чтобы выбрать эту целую строку, а затем PASTE (Ctrl + V). Ячейка может иметь красную звездочку (указывающую, что она не сохраняется).

Шаг 5

  • Нажмите любую другую строку, чтобы запустить инструкцию insert (красный Asterix исчезнет)

Примечание. 1. Если столбцы находятся не в правильном порядке, как в таблице Target, вы всегда можете выполнить шаг 2 и выбрать столбцы в том же порядке, что и в таблице Target

Примечание - 2. Если у вас есть столбцы Identity, выполните SET IDENTITY_INSERT sometableWithIdentity ON, а затем выполните приведенные выше шаги и в конце выполните SET IDENTITY_INSERT sometableWithIdentity OFF

Ответ 8

Я думаю, что это утверждение может делать то, что вы хотите.

INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);

Ответ 9

insert into stock_take_item_copy (stock_take_id, item_id) select stock_take_id, item_id from mymissingdata

Почему я получил #1062 - Duplicate entry '20239' for key 'PRIMARY'? как изменить первичный ключ в таблице?

Ответ 10

 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")