Каковы альтернативы для предложения ORDER BY в представлении?


12

Этот вопрос просто должен был быть на этом сайте :)

ORDER BY запрещено использовать в представлении, как я понял из-за возможности многократного упорядочивания при использовании этого представления.

Я знаю, что есть способы обойти это ограничение, например TOP 99.999999 PERCENT, но я хотел бы знать, что является лучшим методом, а не как его взломать.

Итак, если я хочу создать представления в своей базе данных для личного использования, то есть я хочу подключиться к базе данных и просто просмотреть данные, исправленные и отсортированные, как мне это сделать, если я не могу заказать представление?

В настоящее время в моей базе данных SQL Server у меня есть представления с TOPхаком, и я часто их использую, но это неправильно.


1
почему не ТОП 100%?
Гарик

@garik - потому что он все еще не гарантирует порядок, если я правильно понимаю ссылку на gbn. Это просто более краткий неправильный ответ
Джек говорит, попробуйте topanswers.xyz

1
@ Джек Дуглас, это был не ответ, это был комментарий о топ 99,999 ...
Гарик

@garik - в SQL Server 2008 ТОП 100 ПРОЦЕНТОВ игнорируется, и работает только 99. Я думаю, что это было исправлено, но моя версия не обновлена.
Желтая кровь

1
Это не техническое ограничение. Это по замыслу. Вот почему любой обходной путь выглядит как хак. Навязывайте свой заказ в запросах против просмотров. Порядок применяется к результирующему набору (вывод запроса e.ge), а не к совокупности данных (например, к представлению или таблице).
Ник Чаммас

Ответы:


2

Не существует такого понятия, как «упорядоченный» вид, потому что вид должен быть набором строк. Используйте хранимую процедуру, если вы хотите фиксированный порядок.


Это ответ, который объясняет, почему вы не можете наложить порядок внутри определения представления. Набор по определению не имеет порядка. Однако при объединении TOPс ним ORDER BYвы теперь определяете новый набор, поскольку порядок влияет на то, какие строки являются «верхними»; Вот почему TOPпозволяет использовать ORDER BYв определении представления.
Ник Чаммас

9

Только самый внешний ORDER BY будет гарантировать заказ

  • Любые промежуточные или внутренние ORDER BY игнорируются.
    Это включает в себя ORDER BY в представлении
  • В любой таблице нет подразумеваемого порядка
  • Нет никакого подразумеваемого порядка из какого-либо индекса (кластеризованного или нет) в этой таблице

связи

ORDER BY гарантирует отсортированный результат только для самой внешней инструкции SELECT запроса. Например, рассмотрим следующее определение представления: (и приведите пример, соответствующий этому вопросу)


Спасибо за разъяснение, но это не тот ответ, который я искал :) Я пытаюсь увидеть, какие есть альтернативы для очень удобного ORDER BY в представлении.
Желтая кровь

3

Добавьте ORDER BY к выводу представления, т.е.

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
Не существует подразумеваемого порядка по кластерному индексу. -1.
Гбн

@SqlACID - хорошее редактирование, +1 вместо -1 :)
Джек говорит, что попробуйте topanswers.xyz

Это означает, что вам нужно переписывать порядок по каждому пункту каждый раз, когда вы запрашиваете представление, чего мы и стараемся избегать, когда используем порядок внутри представления.
Желтая кровь

Как сказал dportas, хранимая процедура-обертка вокруг запроса будет работать, но, вероятно, не то, что вы ищете.
SqlACID

Я на самом деле пробовал хранимую процедуру, но это не было легко и быстро, чтобы запросить или манипулировать. Мех.
Желтая кровь
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.