SQL Server 'выберите * в' versus 'insert в..select *

Скажем, table1 и table2 уже существуют, есть ли разница между этими запросами

query1: -

select * into table1 from table2 where 1=1

query2: -

insert into table1 select * from table2

Ответ 1

select * into table1 from table2 where 1=1 создает таблицу1 и вставляет в нее значения table2. Итак, если таблица уже создана, оператор будет давать ошибку.

insert into table1 select * from table2 только вставляет значения таблицы2 в таблицу1.

Ответ 2

Первый ( SELECT INTO) будет создавать и заполнять новую таблицу второй ( INSERT... SELECT) вставкой в существующую таблицу.

В версиях SQL Server до 2008 года первый может быть минимально зарегистрирован, а второй - нет, но это уже не так.

Ответ 3

select * into table1 from table2 where 1=1

Запрос выше требует, чтобы таблица НЕ существовала. Вам не нужно указывать столбцы, поскольку все столбцы создаются по мере их получения из исходной таблицы.

insert into table1 select * from table2 

Для вышеуказанного запроса вам нужна СУЩЕСТВУЮЩАЯ таблица1. Столбцы в обеих таблицах также должны быть в точно таком же порядке, иначе вам нужно предоставить список столбцов для обеих таблиц.

Ответ 4

В query2 таблица table1 должна существовать до запуска команды

В Query1, table1 будет создана или будет сгенерировано исключение, если он уже существует

Ответ 5

INSERT INTO TABLE_A SELECT * FROM TABLE_B

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

SELECT * INTO TABLE_A FROM TABLE_B

Создает новый TABLE_A, заполненный значениями TABLE_B