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 реляционных базах данных.