Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разный синтаксис insert - в чём разница?  [new]
Andrea911
Member

Откуда:
Сообщений: 22
Приветствую!
Подскажите, в чём разница между этими двумя вариантами инсерта?

Insert into tbl1(col1, col2) select col1, col2 from tbl2
И
Insert into tbl1
Select
Col1 = tbl2.col1
Col2 = tbl2.col2
from tbl2
(Пардон за форматирование, пишу с телефона, очень неудобно)
17 окт 18, 17:04    [21706876]     Ответить | Цитировать Сообщить модератору
 Re: Разный синтаксис insert - в чём разница?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Andrea911,

ну, например, в том что во втором случае алиас колонок не имеет никакого значения
ну и более "правильно" и меньше проблем в личной жизни это первый вариант, с перечислением колонок на вставку
17 окт 18, 17:16    [21706901]     Ответить | Цитировать Сообщить модератору
 Re: Разный синтаксис insert - в чём разница?  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
insert into tbl1
select 
Col1 = tbl2.col1
Col2 = tbl2.col2
from tbl2

Вот эти столбцы это алиасы для селекта, а не для инсерта в таблицу tbl1.


Вот такой запрос все равно не вставит tbl2.col1 в tbl1.col2 и tbl2.col2 в tbl1.col1:
insert into tbl1
select 
Col2 = tbl2.col1
Col1 = tbl2.col2
from tbl2

Если стобцы не указаны в insert to то они берутся в порядке в котором объявлены в таблице, и не важно какие алиасы в select.
insert into tbl1 --не указал список столбцов? порядок будет как в дефинишене таблицы tbl1
select ...


Best practices: Всегда указывать столбцы в insert to. Во первых читается лучше, во вторых при изменении таблицы не будет сюрпризов.
т.е. ваш первый вариант, самый правильный.
insert into tbl1(col1, col2) select col1, col2 from tbl2
17 окт 18, 19:27    [21707107]     Ответить | Цитировать Сообщить модератору
 Re: Разный синтаксис insert - в чём разница?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 53736
второй запрос будет работать не на всех SQL-серверах, в частности, Оракл свалит ошибку
Select Col1 = tbl2.col1,
       Col2 = tbl2.col2
  from tbl2

ORA-00923: ключевое слово FROM не найдено там, где оно ожидалось
18 окт 18, 07:34    [21707331]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить