Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Преобразование результатов SELECT в INSERT в SQL Server

Быстрый ответ

Для формирования запроса insert на основании данных, полученных при помощи select, следует применить такой синтаксис:

SQL
Скопировать код
INSERT INTO Назначение (Столбец1, Столбец2, ...)
SELECT Столбец1, Столбец2, ... FROM Источник WHERE УсловиеФильтрации;

Таким образом, данные из исходной таблицы передаются в соответствующие столбцы целевой таблицы. Использование условия WHERE позволяет отфильтровать данные по определенным критериям.

Пример использования:

SQL
Скопировать код
INSERT INTO НовыйПерсонал (ID, Имя)
SELECT ИдентификаторСотрудника, ПолноеИмя FROM Сотрудники WHERE Статус = 1;

Такой подход позволяет эффективно перенести данные о работающих сотрудниках в таблицу НовыйПерсонал, синхронизируя выбранные поля с заранее определенной структурой таблицы.

Кинга Идем в IT: пошаговый план для смены профессии

SSMS и инструменты автоматизации

SQL Server Management Studio (SSMS) и приложение SSMS Toolpack предлагают возможности автоматизации преобразования результатов запроса SELECT в INSERT. Это особенно используется при работе с большими объемами данных или в ситуациях, когда данные разнесены по разным базам данных.

Ручное создание скриптов insert

Если требуется быстрый и простой метод, можно использовать следующую конструкцию для ручного создания скриптов INSERT INTO, объединяя результаты запроса SELECT:

SQL
Скопировать код
DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += 
  'INSERT INTO МояЦелеваяТаблица (Столбец1, Столбец2) VALUES (' +
   QUOTENAME(Кол1, '''') + ', ' + 
   QUOTENAME(Кол2, '''') + ');' + CHAR(13)
FROM ИсходнаяТаблица
WHERE УсловиеФильтрации;

EXEC sp_executesql @sql;

Функция QUOTENAME() облегчает работу с кавычками, а ISNULL содействует в обработке значений NULL.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Динамическое создание скриптов insert

Если структура таблиц часто меняется, то динамическое создание скриптов insert становится очень удобным. Представления каталогов SQL Server sys.all_columns и динамический SQL совместно выполняют работу незаменимых помощников:

SQL
Скопировать код
DECLARE @table NVARCHAR(128) = N'ЦелеваяТаблица', @sql NVARCHAR(MAX), @cols NVARCHAR(MAX);

SELECT @cols = STUFF((
    SELECT ', ' + QUOTENAME(name) 
    FROM sys.all_columns 
    WHERE object_id = OBJECT_ID(@table) 
    FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 2, '');

SET @sql = 'INSERT INTO ' + @table + '(' + @cols + ') SELECT ' + @cols + ' FROM ...';
-- В указанном выше запросе необходимо вставить соответствующий контент

EXECUTE(@sql);

Функции STUFF и FOR XML PATH помогают автоматически подготовить список столбцов, который затем применяется в запросе INSERT.

Оптимизация с помощью процедур

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

SQL
Скопировать код
CREATE PROCEDURE GenerateInsertScript 
  @Source NVARCHAR(128),
  @Target NVARCHAR(128),
  @Filter NVARCHAR(MAX) = NULL
AS
BEGIN
  DECLARE @sql NVARCHAR(MAX);
  -- Здесь может быть логика динамического создания скриптов
  SET @sql = --...;
  EXECUTE(@sql);
END
GO

Параметры, такие как @Source, @Target и @Filter, дают возможность конфигурировать запросы в соответствии с потребностями данных.

Замена и очистка

Важно произвести замену временных названий таблиц на целевые в сгенерированных скриптах, а также не забыть удалить временные таблицы после выполнения работы, чтобы обеспечить порядок и оптимальное функционирование базы данных.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой синтаксис используется для преобразования результатов SELECT в INSERT в SQL Server?
1 / 5