MYSQL ДЕНЬ(), МЕСЯЦ(), ГОД(), ЧАС(), МИНУТА(), ВЕКТОРА()
Рейтинг:
MYSQL CURDATE(), CURRENT_DATE(), CURTIME(), CURRENT_TIME(), NOW(), SYSDATE() Рейтинг:
SQL SERVER — как преобразовать набор результатов оператора Select в операторы Insert необходимо создать, в основном, когда им нужно перенести небольшой объем данных из одного экземпляра в другой или из одной среды в другую.
Недавно я создал одну из новых баз данных филиалов моего клиента из базы данных других филиалов и столкнулся с этим сценарием. К счастью, со времен SQL Server 2005 у нас есть решение, но оно было очень сложным, особенно когда вам нужно было сделать это для таблиц, так как они имеют множество столбцов.
Причина Я пишу это решение в том, что вы можете сделать это за несколько кликов в SQL Server 2012 и выше. Прежде чем приступить к решению, я хотел бы создать образец для демонстрации решения.
Образец: Ниже приведен оператор выбора, в котором я изменил набор результатов для демонстрации.
ИСПОЛЬЗОВАНИЕ [AdventureWorks2012]
ИДТИ
ВЫБЕРИТЕ [ИД отдела]
,[Имя] + 'Отдел' Как [Имя]
,[Имя группы]
,Getdate() как [ModifiedDate]
ОТ [Отдела кадров].[Отдел]
ИДТИ
Ниже приведены два решения, одно из которых является традиционным, а другое можно использовать в SQL Server 2012 и более поздних версиях.
Решение 1. Использование конкатенации строк (традиционный метод) В этом решении необходимо объединить результирующий набор оператора Select, чтобы преобразовать его в оператор Insert (с некоторыми изменениями данных). Вы должны убедиться, что одинарные кавычки (‘) находятся в правильных местах. Кроме того, если данные в результирующем наборе не относятся к строковому типу данных, для объединения их необходимо преобразовать в строковый тип данных. В случае, если в таблице есть столбец идентификаторов, вы должны передать имя столбца в операторе INSERT, а также с помощью SET IDENTITY_INSERT. Причина, по которой я НЕ рекомендовать это решение, потому что если у вас больше столбцов в таблице, это также займет больше времени для разработки и отладки.
ИСПОЛЬЗОВАНИЕ [AdventureWorks2012]
ИДТИ
ВЫБИРАТЬ
'ВСТАВИТЬ В tbl_sample (
[DepartmentID],[Name],[GroupName],[ModifiedDate])
ЗНАЧЕНИЯ(' + ПРЕОБРАЗОВАТЬ(VARCHAR(50),[DepartmentID])
+ ',''' + [Имя] + 'Отдел'','
+ ''''+ [Имя группы] + ''','
+ ''''+ ПРЕОБРАЗОВАТЬ(VARCHAR(50),GETDATE(),120) + ''')'
ОТ [Отдела кадров]. [Отдел]
ИДТИ
Решение 2. Использование сценария создания (новый метод) Этот метод применим к SQL Server 2012 и более поздним версиям и покажется вам довольно простым. Позвольте мне объяснить этот метод, используя два простых шага.
Шаг 1: Прежде всего, вам нужно разработать оператор выбора, как это сделал я в образце, на основе ваших требований и ВСТАВИТЬ В ТАБЛИЦУ, как показано ниже.
ИСПОЛЬЗОВАНИЕ [AdventureWorks2012]
ИДТИ
ВЫБЕРИТЕ [ИД отдела]
,[Имя] + 'Отдел' Как [Имя]
,[Имя группы]
,Getdate() как [ModifiedDate]
INTO [tbl_Department_Sample] -- Результирующий набор вставлен в таблицу
ОТ [Отдела кадров].[Отдел]
ИДТИ
Шаг 2: Набор результатов оператора select вставлен в таблицу ([tbl_Department_Sample]). Теперь вам просто нужно сгенерировать сценарий (только данные) таблицы ([tbl_Department_Sample]), используя функцию «Создать сценарий» в SQL Server 2012 и более поздних версиях.