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

Откуда: Лужки
Сообщений: 5308
Не могу понять, что означает данное ограничение:
http://msdn.microsoft.com/en-us/library/ms174335.aspx
When TOP is used with INSERT the referenced rows are not arranged in any order and the ORDER BY clause can not be directly specified in this statements. If you need to use TOP to insert rows in a meaningful chronological order, you must use TOP together with an ORDER BY clause that is specified in a subselect statement.


В BOL для 2012 это выглядит так
При использовании выражения TOP в инструкции INSERT строки, на которые имеются ссылки, не упорядочиваются, а предложение ORDER BY не может быть прямо указано в этих инструкциях.
Если для вставки строк в значимом хронологическом порядке необходимо использовать предложение TOP, вместе с ним в инструкции подзапроса выборки следует использовать предложение ORDER BY.

Понимаю все слова, но не понимаю, что они означают вместе (
3 окт 12, 11:47    [13260539]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Зайцев Фёдор,

INSERT TOP(2) T SELECT * FROM TT ORDER BY F
вставит две, но случайные записи, потому что игнорирует ORDER BY
INSERT T SELECT * FROM (SELECT TOP(2) * FROM TT ORDER BY BY F)
А так вставятся первые две записи, отобранные в порядке возрастания F.
Мне так кажется
3 окт 12, 11:57    [13260635]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Алиас производной таблицы забыл
iap
Зайцев Фёдор,

INSERT TOP(2) T SELECT * FROM TT ORDER BY F
вставит две, но случайные записи, потому что игнорирует ORDER BY
INSERT T SELECT * FROM (SELECT TOP(2) * FROM TT ORDER BY BY F) TT
А так вставятся первые две записи, отобранные в порядке возрастания F.
Мне так кажется
3 окт 12, 11:58    [13260642]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
iap
Зайцев Фёдор,

INSERT TOP(2) T SELECT * FROM TT ORDER BY F
вставит две, но случайные записи, потому что игнорирует ORDER BY
INSERT T SELECT * FROM (SELECT TOP(2) * FROM TT ORDER BY BY F)
А так вставятся первые две записи, отобранные в порядке возрастания F.
Мне так кажется

Т.е. речь идёт именно о INSERT TOP, а не о INSERT ... SELECT TOP?
Просто я пытался найти в BOL подтверждение тому, что INSERT ... SELECT TOP упорядочивает записи (кстати, не преуспел), а нашёл сабж
3 окт 12, 12:08    [13260725]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
мну
, что INSERT ... SELECT TOP упорядочивает записи

INSERT ... SELECT TOP ... ORDER BY, конечно
3 окт 12, 12:09    [13260741]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Зайцев Фёдор,

здесь приводились ссылки на некие статьи лишь по поводу сохранения порядка поля IDENTITY в целевой таблице,
если в ORDER BY стоит поле с IDENTITY источника.
Но, во-первых, речь там шла о старых уже версиях, а, во-вторых, это была неофициальная документация.
3 окт 12, 12:12    [13260766]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Зайцев Фёдор
мну
, что INSERT ... SELECT TOP упорядочивает записи

INSERT ... SELECT TOP ... ORDER BY, конечно
С момента выхода SQL2005 Microsoft официально считает,
что конструкция TOP(N) ... ORDER BY предназначена не для упорядочивания записей,
а лишь для указания критерия их отбора в число TOP(N).
Хотя, при этом самый внешний запрос вроде как должен упорядочиваться этой конструкцией.
Какая-то тут нелогичность получается однако!
3 окт 12, 12:20    [13260844]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
iap
Зайцев Фёдор,

здесь приводились ссылки на некие статьи лишь по поводу сохранения порядка поля IDENTITY в целевой таблице,
если в ORDER BY стоит поле с IDENTITY источника.
Но, во-первых, речь там шла о старых уже версиях, а, во-вторых, это была неофициальная документация.
"некие статьи" - это статьи разработчиков MSSQL в их блогах, если я правильно помню.
3 окт 12, 12:22    [13260855]     Ответить | Цитировать Сообщить модератору
 Re: insert into top order by  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
C ограничением INSERT TOP всё понятно, вроде.
Понятно даже, как работает INSERT INTO ... SELECT TOP ... ORDER BY - это, собственно, написано во втором предложении
второе предложение
Если для вставки строк в значимом хронологическом порядке необходимо использовать предложение TOP, вместе с ним в инструкции подзапроса выборки следует использовать предложение ORDER BY.

осталось только найти подтверждение для INSERT INTO ... SELECT ... ORDER BY, т.е. без TOP

iap
С момента выхода SQL2005 Microsoft официально считает,
что конструкция TOP(N) ... ORDER BY предназначена не для упорядочивания записей,
а лишь для указания критерия их отбора в число TOP(N).

как понял я, это относится лишь в представлениям и инлайн-функциям
3 окт 12, 12:34    [13260944]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить