Вставить все значения таблицы в другую таблицу в SQL - PullRequest
118 голосов
/ 23 февраля 2009

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

Ответы [ 9 ]

248 голосов
/ 23 февраля 2009

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

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

17 голосов
/ 21 апреля 2010

Попробуйте это:

INSERT INTO newTable SELECT * FROM initial_Table
11 голосов
/ 22 августа 2011

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

INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
6 голосов
/ 23 февраля 2009

С здесь:

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename
4 голосов
/ 07 июня 2016

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

Шаг 1

  • Щелкните правой кнопкой мыши по таблице в проводнике и выберите «Редактировать первые 100 строк»;

Шаг 2

  • Затем вы можете выбрать нужные вам строки ( Ctrl + Click или Ctrl + A ), а также щелкнуть правой кнопкой мыши и скопировать. ( Примечание : если вы хотите добавить условие ", где ", то щелкните правой кнопкой мыши Grid -> Pane -> SQL Теперь вы можете отредактировать запрос и добавить условие WHERE, затем снова щелкните правой кнопкой мыши -> Выполнить SQL, необходимые строки будут доступны для выбора внизу)

Шаг 3

  • Выполните шаг 1 для целевой таблицы.

Шаг 4

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

Шаг 5

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

Примечание - 1 : если столбцы расположены не в правильном порядке, как в целевой таблице, вы всегда можете выполнить шаг 2 и выбрать столбцы в том же порядке, что и в целевой таблице

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

4 голосов
/ 23 февраля 2009

Вы можете использовать оператор select into. Подробнее в W3Schools .

3 голосов
/ 23 февраля 2009

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

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

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

2 голосов
/ 23 февраля 2009

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

INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);
0 голосов
/ 18 апреля 2011
 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...