powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему DELETE TOP не подразумевает ORDER BY
12 сообщений из 37, страница 2 из 2
Почему DELETE TOP не подразумевает ORDER BY
    #39955490
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza,

Или потому что его завезли в cte, а два завоза делать было лень.
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39955526
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza
Или дело в слове заранее ?
Да
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956230
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Появилась еще мысль, что копать надо глубже, к моменту существования вычислительных машин,иначе работающих с памятью. Возможно истоки в аппаратной реализации изменения данных в ячейках памяти старинных мейнфреймов.
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956235
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Ну объясните уже наконец, почему нельзя
Код: sql
1.
update top (...) MyTable set ... where ... order by ...

И можно
Код: sql
1.
with t as (select top (...) ... from MyTable where ... order by ...) update t set ...

?
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956295
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Поскольку обновление происходит с отобранным набором ключей, то не имеет значения - в каком порядке они отсортированы при обновлении. У меня есть сомнения, что UPDATE TOP - это не изобретение MS. Если это так, что выводы вполне очевидны: MS просто не пошли дальше в отступлении от канона.
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956304
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Поскольку обновление происходит с отобранным набором ключей, то не имеет значения - в каком порядке они отсортированы при обновлении.
Слушайте, ну хватит уже ходить вокруг да около.
Вам был задан конретный вопрос - 22131132 Или там что-то непонятное или несравнимое написано?
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956673
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Владислав Колосов
Поскольку обновление происходит с отобранным набором ключей, то не имеет значения - в каком порядке они отсортированы при обновлении.
Слушайте, ну хватит уже ходить вокруг да около.
Вам был задан конретный вопрос - 22131132 Или там что-то непонятное или несравнимое написано?


Полагаю, что второй пример - это стандартное обновление одной из связанных таблиц, где в основной таблице выбираются конкретные строки (допустим, строится некий дополнительный "ключ" по которому записи "связываются" с записями из CTE) , при этом CTE уже не рассматривается ядром как представление (представление на основе обновляемой таблицы) а рассматривается как отдельная внешняя таблица,- с наложением соответствующих блокировок и т.п. Таким образом в "движок" вносить ни чего нового не надо было,- просто используется стандартный механизм (пуст и немного"через ж@пу").

А по поводу первого примера, - не сделали просто "потому что" (by design). Точно так же как и не предусмотрено delete top (n) from anyTable; напрямую.

Хех, можно, вероятно , задать этот вопрос Дмитрию Пилюгину

Кстати, двумя месяцами раньше меня на этом форуме просвещали на эту же тему (про неработающий delete top (n) ) . Т.е. топикстартер форум не читал...
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956682
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_
олагаю, что второй пример - это стандартное обновление одной из связанных таблиц, где в основной таблице выбираются конкретные строки (допустим, строится некий дополнительный "ключ" по которому записи "связываются" с записями из CTE) , при этом CTE уже не рассматривается ядром как представление (представление на основе обновляемой таблицы) а рассматривается как отдельная внешняя таблица,- с наложением соответствующих блокировок и т.п. Таким образом в "движок" вносить ни чего нового не надо было,- просто используется стандартный механизм (пуст и немного"через ж@пу").
Планы то одинаковые, за исключением того, что во втором есть сортировка.

Например, скрипт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
IF OBJECT_ID('tempdb..#T') IS NOT NULL 
DROP TABLE #T 

CREATE TABLE #T(ID INT NOT NULL PRIMARY KEY CLUSTERED, name varchar(100) )
GO
INSERT INTO #T 
SELECT id, name from sysobjects
GO


DELETE TOP (5) FROM #T

DELETE FROM T
FROM (SELECT TOP (5) * FROM #T ORDER BY name) T

SELECT * FROM #T ORDER BY ID 
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956708
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Показательней будет, если сделать ORDER BY ID
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956710
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов и SIMPLicity , вспоминайте иногда о "бритве Оккама"
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956733
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
alexeyvg,

Показательней будет, если сделать ORDER BY ID
Да, я и такой делал, там вообще отличий нет, Sort меняется на Top
А этот привёл, потому что даже при сортировке по имени нет никакого "стандартное обновление одной из связанных таблиц, где в основной таблице выбираются конкретные строки, при этом CTE уже не рассматривается ядром как представление, а рассматривается как отдельная внешняя таблица,- с наложением соответствующих блокировок и т.п."
...
Рейтинг: 0 / 0
Почему DELETE TOP не подразумевает ORDER BY
    #39956751
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

соглашусь, что это "самоделка" от MS, и они могут ответить - почему не реализована сортировка. Стандарт SQL92 ничего такого не предусматривает.

13.9 <update statement: positioned>

Function

Update a row of a table.

Format

<update statement: positioned> ::=
UPDATE <table name>
SET <set clause list>
WHERE CURRENT OF <cursor name>

<set clause list> ::=
<set clause> [ { <comma> <set clause> }... ]

<set clause> ::=
<object column> <equals operator> <update source>

<update source> ::=
<value expression>
| <null specification>
| DEFAULT

<object column> ::= <column name>
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему DELETE TOP не подразумевает ORDER BY
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]