Які є альтернативи для порядку ORDER BY у Погляді?


12

Це питання просто мало бути на цьому сайті :)

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

Я знаю, що існують, наприклад, способи обійти це обмеження, TOP 99.999999 PERCENTале хотілося б знати, яка найкраща практика, а не як її зламати.

Отже, якщо я хочу створити представлення даних у своїй базі даних для особистого використання, тобто я хочу підключитися до бази даних та просто побачити дані фіксованими та відсортованими, як це робити, якщо я не можу замовити перегляд?

Наразі в моєму БД SQL Server я переглядаю TOPхак, і я їх дуже багато використовую, але це не так.


1
чому б не ТОП 100%?
garik

@garik - тому що він все ще не гарантує замовлення, якщо я правильно розумію посилання gbn. Це просто більш
коротка

1
@Jack Douglas це була не відповідь, це коментар про топ 99,999 ...
garik

@garik - у SQL Server 2008 ігнорується ТОП-100 ПЕРЦЕНТІВ, і працює лише 99. Я думаю, це було виправлено, але моя версія не оновлювалася.
yellowblood

1
Це не технічне обмеження. Це за дизайном. Ось чому будь-яке вирішення відчуває себе злом. Введіть своє замовлення у запитах проти переглядів. Замовлення поширюється на набір результатів (наприклад, вихід запиту), а не на збір даних (наприклад, представлення даних або таблиця).
Nick Chammas

Відповіді:


2

Не існує такого поняття, як "впорядкований" вигляд, оскільки подання має бути набором рядків. Використовуйте збережену процедуру, якщо потрібно фіксоване замовлення.


Це відповідь, яка пояснює, чому ви не можете накладати впорядкування усередині визначення перегляду. Набір, за визначенням, не має наказу. Однак, комбінуючи TOPз ORDER BY, ви тепер визначаєте новий набір, оскільки впорядкування впливає на те, які рядки є "вгорі"; саме тому TOPдозволяє використовувати ORDER BYу визначенні подання.
Nick Chammas

9

Лише самий зовнішній ЗАМОВЛЕННЯ гарантує замовлення

  • Будь-яке проміжне чи внутрішнє ЗАМОВЛЕННЯ BY ігнорується.
    Сюди входить ЗАМОВЛЕННЯ В перегляді
  • Немає загального порядку в жодній таблиці
  • Немає загального порядку з жодного індексу (кластеризованого чи ні) у цій таблиці

Посилання

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


Дякую за роз’яснення, але це не відповідь, яку я шукав :) Я намагаюся побачити, які альтернативи існують для дуже зручного ЗАМОВЛЕННЯ В огляді.
yellowblood

3

Додайте ЗАМОВЛЕННЯ ДО на результат вигляду, тобто

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
Немає загального порядку за кластерним індексом. -1.
gbn

@SqlACID - хороша редакція, +1 замість -1 :)
Джек каже спробувати topanswers.xyz

Це означає, що вам потрібно перезаписувати замовлення за допомогою пункту кожного разу, коли ви запитуєте представлення даних, чого ми намагаємося уникати, коли ми використовуємо замовлення всередині подання.
yellowblood

як говорили dportas, збережена обгортка протоколу навколо запиту працюватиме, але, ймовірно, не те, що ви шукаєте.
SqlACID

Я фактично спробував збережену процедуру, але це було не так просто і швидко, щоб запитувати чи маніпулювати. Мех.
yellowblood
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.