SQL Server "выбрать * в" против "вставить в ..select * - PullRequest
26 голосов
/ 19 декабря 2011

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

query1: -

select * into table1 from table2 where 1=1

query2: -

insert into table1 select * from table2

Ответы [ 6 ]

42 голосов
/ 19 декабря 2011

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

insert into table1 select * from table2 вставляет только значения table2 в table1.

8 голосов
/ 19 декабря 2011

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

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

5 голосов
/ 19 декабря 2011
select * into table1 from table2 where 1=1

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

insert into table1 select * from table2 

Для вышеуказанного запроса вам нужна таблица EXISTING1.Столбцы в обеих таблицах также должны быть в одинаковом порядке, в противном случае вам необходимо предоставить список столбцов для обеих таблиц.

3 голосов
/ 19 декабря 2011

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

В запросе 1 будет создано table1 или будет выдано сообщение об ошибке, если оно уже существует

1 голос
/ 11 июня 2013
INSERT INTO TABLE_A SELECT * FROM TABLE_B

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

SELECT * INTO TABLE_A FROM TABLE_B

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

0 голосов
/ 01 апреля 2019

а) выберите * в таблицу1 из таблицы2, где 1 = 1 - если таблица1 и таблица2 уже существуют, при выполнении запроса вы получите ошибку ниже.«Сообщение 2714, Уровень 16, Состояние 6, Строка 1 В базе данных уже есть объект с именем 'table1'"

b) вставить в table1 select * from table2 -Если table1 является дубликатом table2, то этоВ запросе учитывается общий оператор вставки Exp: выберите * в table1 из таблицы 2, где 1 = 0. Как бы то ни было, вы будете накапливать повторяющиеся данные при каждом выполнении запроса.

...