Sql insert into t sql: INSERT (Transact-SQL) — SQL Server
Содержание
tsql — Сочетание INSERT INTO и WITH/CTE
спросил
Изменено
2 года, 1 месяц назад
Просмотрено
280 тысяч раз
У меня очень сложный CTE, и я хочу вставить результат в физическую таблицу.
Верно ли следующее?
ВСТАВИТЬ В dbo.prf_BatchItemAdditionalAPartyNos ( Идентификатор партии, Номер счета, APartyNo, SourceRowID ) С вкладкой ( -- какой-то запрос ) Вкладка ВЫБЕРИТЕ * ИЗ
Я думаю об использовании функции для создания этого CTE, который позволит мне использовать его повторно. Есть предположения?
- tsql
- вставка
- выражение общей таблицы
Вам нужно сначала поставить CTE, а затем объединить INSERT INTO с оператором select. Кроме того, ключевое слово «AS», следующее за именем CTE, не является обязательным:
С вкладкой КАК ( бла-бла ) ВСТАВИТЬ В dbo.prf_BatchItemAdditionalAPartyNos ( Идентификатор партии, Номер счета, APartyNo, SourceRowID ) Вкладка ВЫБЕРИТЕ * ИЗ
Обратите внимание: в коде предполагается, что CTE вернет ровно четыре поля и что эти поля по порядку и типу совпадают с теми, что указаны в операторе INSERT.
Если это не так, просто замените «SELECT *» конкретным выбором полей, которые вам нужны.
Что касается вашего вопроса об использовании функции, я бы сказал «это зависит». Если вы помещаете данные в таблицу только из соображений производительности, а скорость приемлема при использовании их через функцию, то я бы рассмотрел функцию как вариант.
С другой стороны, если вам нужно использовать результат CTE в нескольких разных запросах, а скорость уже является проблемой, я бы выбрал таблицу (либо обычную, либо временную).
WITH common_table_expression (Transact-SQL)
Предложение WITH
для общих табличных выражений идет вверху.
Преимущество каждой вставки в CTE заключается в визуальном отделении логики запроса от сопоставления столбцов.
Найдите ошибку:
С _INSERT_ AS ( ВЫБИРАТЬ [идентификатор партии] = бла ,[APartyNo] = вздор ,[SourceRowID] = бла-бла-бла ИЗ Таблицы1 КАК t1 ) ВСТАВИТЬ Таблицу 2 ([BatchID], [SourceRowID], [APartyNo]) ВЫБЕРИТЕ [BatchID], [APartyNo], [SourceRowID] ОТ _INSERT_
Та же ошибка:
ВСТАВИТЬ Таблицу 2 ( [идентификатор партии] ,[идентификатор исходной строки] ,[APartyNo] ) ВЫБИРАТЬ [идентификатор партии] = бла ,[APartyNo] = вздор ,[SourceRowID] = бла-бла-бла ИЗ Таблицы1 КАК t1
Несколько строк шаблонного кода чрезвычайно упрощают проверку того, что код вставляет нужное количество столбцов в правильном порядке даже при очень большом количестве столбцов. Ваше будущее я скажет вам спасибо позже.
2
Да:
С вкладкой ( бла-бла ) ВСТАВЬТЕ В dbo.prf_BatchItemAdditionalAPartyNos ( BatchID, AccountNo, APartyNo, SourceRowID) Вкладка ВЫБЕРИТЕ * ИЗ
Обратите внимание, что это для SQL Server, который поддерживает несколько CTE:
WITH x AS (), y AS () INSERT INTO z (a, b, c) SELECT a, b, c FROM y
Teradata допускает только одно CTE, и синтаксис приведен в качестве примера.
Опоздал на вечеринку, но для своих целей я хотел иметь возможность запускать введенный пользователем код и сохранять его во временной таблице. При использовании оракула таких проблем нет. Вставка находится в начале оператора перед предложением with.
Чтобы это работало на сервере sql, сработало следующее:
INSERT в #stagetable execute (@InputSql)
(поэтому оператор select @inputsql может начинаться как предложение with).
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
Оператор SQL INSERT INTO — Темы масштабирования
Обзор
Оператор SQL INSERT INTO — это команда, которая используется для вставки данных в таблицы. Используя вставку в таблицу SQL, мы можем вставлять новые одиночные или множественные записи в таблицу реляционных баз данных. Мы также можем скопировать данные из одной таблицы в другую таблицу , используя оператор INSERT INTO SELECT. Для использования инструкции INSERT INTO SELECT типы данных исходной и целевой таблиц должны быть одинаковыми.
Введение
Оператор SQL INSERT INTO представляет собой SQL-запрос или команду, используемую для вставки данных в таблицы. Используя вставку в таблицу SQL, мы можем вставлять новые одиночные или множественные записи в таблицу реляционных баз данных (таких баз данных, как ORACLE, MySQL, MS-Access, IBM DB2 и т. д.).
Примечание:
- Строка таблицы базы данных также известна как запись или кортеж .
- Столбец таблицы базы данных также известен как атрибут .
Для вставки данных в таблицу у нас есть два способа:
- Первый — с помощью команды SQL вставки в таблицу.
- Мы также можем вставлять новые записи в таблицу, используя вставку SQL в оператор выбора. Мы узнаем об обоих способах позже в этой статье.
Прежде чем изучать вставку в таблицу SQL, давайте сначала кратко ознакомимся с SQL и управлением базой данных.
Итак, SQL или язык структурированных запросов используется для управления и обмена данными с данными, хранящимися в виде таблиц в базах данных. Чтобы манипулировать данными, нам сначала нужно вставить данные в таблицы.
INSERT — это команда DML (язык манипулирования данными) , используемая в SQL и реляционных базах данных, связанных с SQL. Чтобы вставить данные в таблицу SQL, нам нужен оператор SQL INSERT INTO. Давайте узнаем о вставке в таблицу SQL подробнее.
Вставка данных без использования пункта SELECT
Как мы видели, у нас есть два способа вставки записей, первый вариант, т. е. вставка в таблицу SQL, может быть сделан в двух разных формах, а именно — путем указания имен столбцов с помощью оператора INSERT INTO, а второй — с помощью не указывать имена столбцов с оператором INSERT INTO. Давайте изучим синтаксис обоих способов.
1. INSERT INTO путем указания имен столбцов
Мы можем вставить новые записи в таблицу базы данных, указав имена конкретных столбцов. Указав имена столбцов, мы получаем гибкость при вставке значений, поскольку мы можем изменить порядок столбцов и значений из фактического порядка столбцов, присутствующих в таблице базы данных.
Синтаксис:
2. INSERT INTO без указания имен столбцов
Мы можем напрямую вставлять новые записи или значения в таблицу базы данных (без упоминания имен столбцов). Синтаксис геттера меньше, когда мы не указываем имена столбцов (предыдущий способ).
Но один из недостатков, связанных с текущим способом, заключается в том, что мы не получаем гибкости, мы не можем изменить порядок значений из фактического порядка столбцов, присутствующих в таблице базы данных.
Синтаксис:
Давайте обсудим несколько примеров, чтобы лучше понять тему.
Примеры
Теперь мы рассмотрим сценарии различных баз данных и вставим новые записи, используя вставку в таблицу SQL. Давайте обсудим различные способы вставки с примерами.
Вставить значения во все столбцы
Предположим, у нас есть база данных жителей города. У нас есть три столбца, а именно: имя гражданина, возраст и число граждан Aadhar. Мы хотим вставить новые записи в таблицу граждан. Как мы видели, для вставки значений во все столбцы у нас есть два способа:
Указав имена столбцов
Мы можем вставить новые записи во все столбцы таблицы Citizen базы данных , указав имена конкретных столбцов .
Пример:
Без указания имен столбцов
Мы также можем вставить новые записи во все столбцы таблицы Citizen базы данных без упоминания конкретных имен столбцов .
Пример:
Выход:
Aadhar_No | Имя | Возраст |
---|---|---|
123456 | Том 9021 5 | 21 |
Примечание Порядок столбцов в операторе вставки должен быть таким же, как и таблицы, присутствующей в базе данных.
Вставка данных только в указанные столбцы
Мы можем вставить новые записи в указанные столбцы таблицы Citizen базы данных, указав имена определенных столбцов.
Предположим, у нас есть база данных учеников школы. У нас есть четыре столбца в таблице студентов: имя, возраст, секция и номер списка. Но мы хотим сохранить только имя, номер списка и возраст ученика в таблице учеников. Итак, мы должны использовать предложение INSERT INTO с конкретными именами столбцов.
Вывод:
Roll_number | Имя | Возраст |
---|---|---|
12 | Том | 15 |
Примечание: Поскольку мы указали имена столбцов, порядок столбцов в операторе вставки не обязательно должен совпадать с порядком таблицы в базе данных.
Вставка нескольких записей
До сих пор мы видели вставку одной записи, но мы также можем вставлять несколько записей в таблицу. Давайте возьмем пример, чтобы лучше визуализировать вставку.
Предположим, у нас есть база данных стран мира.
Таблица стран состоит из трех столбцов: название страны, код страны и континент (на котором расположена страна). Итак, вставим в таблицу стран записи разных стран.
1. Указав имена столбцов таблицы:
2. Без указания имен столбцов таблицы:
Вывод:
Название | Код | Континент |
---|---|---|
Индия | IND | Азия |
Франция | FRN | Европа |
Япония | Япония | Азия |
Бразилия | BRZ | Африка |
Мы можем скопировать данные из одной таблицы в другую с помощью инструкции INSERT INTO SELECT.
Примечание:
- Для использования оператора INSERT INTO SELECT типы данных исходной и целевой таблиц должны быть одинаковыми.
- Исходные данные исходной таблицы и существующие записи целевых таблиц не затрагиваются.
Как и в случае с другим оператором INSERT INTO, у нас есть два способа копирования данных в другую таблицу.
1. Без указания имен столбцов таблицы:
Мы можем скопировать все столбцы одной таблицы в другую таблицу просто не указывая имена столбцов.
СИНТАКСИС:
2. Указав имена столбцов таблицы:
Мы можем скопировать определенные столбцы одной таблицы в другую таблицу, указав имена необходимых столбцов.
Синтаксис:
Примечание: Предложение WHERE является необязательным. Мы можем использовать предложение WHERE, если хотим, чтобы из исходной таблицы в целевую таблицу или выходные данные были скопированы только определенные условные записи.
Возьмем пример для визуализации предложения INSERT INTO SELECT.
Предположим, у нас есть база данных сотрудников компании. Таблица сотрудников состоит из четырех столбцов, а именно идентификатора сотрудника, имени, страны и зарплаты. Мы хотим скопировать данные таблицы сотрудников в другую таблицу, а именно в companyData.
1. Без указания имен столбцов таблицы:
2. С указанием имен столбцов таблицы:
Заключение
- INSERT — это DML (язык обработки данных) команда , используемая в SQL и связанных с SQL реляционных базах данных.