Вставте всі значення таблиці в іншу таблицю в SQL


128

Я намагаюся вставити всі значення однієї таблиці в іншу. Але оператор insert приймає значення, але я хотів би, щоб він прийняв select * з початкової_Table. Чи можливо це?

Відповіді:


262

Оператор 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 - це коли ви хочете створити нову таблицю як частину команди.

Ви не вказали, чи потрібно створити нову таблицю як частину команди, тому ВСТАВИТЬ В ІНТЕРНЕТ ... SELECT FROM має бути добре, якщо ваша таблиця призначення вже існує.


3
Що--? Хтось хоче залишити мені коментар, пояснюючи, чому ця публікація генерує голоси? Я не бачу нічого у питанні про оперативні програми, яке б вказувало на те, що нова таблиця повинна бути створена як частина запиту.
Метт Гамільтон,

Як це поводиться з порушеннями обмеження цілісності? Наприклад, якщо дублікат унікального продукту зупиняє запит чи просто пропускає цей конкретний запис?
Мартін Дейл Лінес

Я вірю, що це призведе до помилки і відкаже транзакцію, тобто нічого не буде скопійовано. Варто тестувати, хоча.
Метт Гамільтон

25

Спробуйте це:

INSERT INTO newTable SELECT * FROM initial_Table

2
Не працює при використанні зірок, коли у нас стовпець особи
Mohsen Tavoosi محسن طاوسی

Для цього сценарію з ідентичністю додайте спочатку SET IDENTITY_INSERT____SQL_встановити та увімкніть значення та вимкнути його, щоб вставити значення ідентичності.
Хуан

13

Ви можете вставити за допомогою підзапиту наступним чином:

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



4

Існує простіший спосіб, коли вам не потрібно вводити жоден код (ідеально підходить для тестування або разових оновлень):

Крок 1

  • Клацніть правою кнопкою миші на таблиці в провіднику і виберіть "Редагувати топ-100 рядків";

Крок 2

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

Крок 3

  • Виконайте крок 1 для цільової таблиці.

Крок 4

  • Тепер перейдіть до кінця сітки, і в останньому рядку в першому стовпці буде зірочка (*) (Цей рядок потрібно додати новий запис). Клацніть по ньому, щоб вибрати весь цей рядок, а потім PASTE ( Ctrl + V ). У комірці може бути червона астерікс (що вказує, що вона не збережена)

Крок 5

  • Клацніть будь-який інший рядок, щоб запустити оператор вставки (Red Asterix зникне)

Примітка - 1 : Якщо стовпці не в правильному порядку, як у таблиці "Ціль", ви завжди можете виконувати крок 2 та вибирати стовпці в тому ж порядку, що і в таблиці "Ціль".

Примітка - 2 - Якщо у вас є стовпці особи, SET IDENTITY_INSERT sometableWithIdentity ONвиконайте вказані вище дії та виконайте наведені вище діїSET IDENTITY_INSERT sometableWithIdentity OFF


3

Якщо ви постійно передаєте багато даних, тобто не заповнюєте тимчасову таблицю, я рекомендую використовувати імпорт / експорт даних SQL Server для відображення таблиць у таблицю.

Інструмент імпорту / експорту, як правило, краще, ніж прямий SQL, коли у вас відображаються перетворення типів та можливе усічення значення. Як правило, чим складніше ваше картографування, тим продуктивніше ви використовуєте такий інструмент ETL, як Integration Services (SSIS), а не прямий SQL.

Інструмент імпорту / експорту - це фактично майстер SSIS, і ви можете зберегти свою роботу як пакет dtsx.


2

Я думаю, що це твердження може робити те, що ти хочеш.

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

0
 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")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.