Признается ли ORDER BY в представлениях SQL Server? - PullRequest
6 голосов
/ 05 мая 2011

В этот ответ до Каковы недостатки использования SqlServer Views? , hyprsleepy предполагает, что предложение ORDER BY не учитывается в представлениях в SQL Server.

Может ли кто-нибудь объяснить, почему это так?

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

Ответы [ 5 ]

8 голосов
/ 05 мая 2011

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

Представления могут использоваться в соединениях или других операциях, которые делают их заказы недействительными.

Поскольку вы не можете использовать вид самостоятельно, i. е. вы не пишете vMyView, вы скорее пишете SELECT * FROM vMyView, несмотря на тот факт, что представление является SELECT само по себе, вы можете (и должны) добавить предложение ORDER BY к выражению SELECT если вам нужен заказ.

Это довольно вменяемое предположение, и фактически оно делает код более понятным.

3 голосов
/ 05 мая 2011

Взгляните на Создайте отсортированное представление в SQL Server 2005 и SQL Server 2008

Есть способ сделать это, но он не поддерживается, просто выполните заказ, когдавыбирая из вида

2 голосов
/ 05 мая 2011

По вашему мнению, в качестве обходного пути включите TOP 100 PERCENT. Затем вы можете использовать ORDER BY.

РЕДАКТИРОВАТЬ или как SQLMenace указал ТОП 99,99 процентов

1 голос
/ 05 мая 2011

Из Википедия :

Так же, как в строках базовой таблицы отсутствуют определенный порядок, доступные строки через вид не появляются ни с какими сортировка по умолчанию. Вид это реляционная таблица и реляционная Модель определяет таблицу как набор строк. Поскольку наборы не упорядочены определение - строки в представлении тоже не заказано. Поэтому Предложение ORDER BY в определении представления бессмысленно.

0 голосов
/ 05 мая 2011

Вы не можете поместить предложение ORDER BY в свои представления. Точная ошибка:

"Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и выражениях общих таблиц, если также не указано TOP или FOR XML."

...