Пропозиція order by (transact-sql)

Вказує стовпець або вираз, за ​​яким здійснюється сортування результуючого набору запиту. Стовпець сортування може бути вказаний за допомогою імені або псевдоніма шпальти чи невід'ємного цілого числа, котрий представляв позицію стовпця в списку вибору.

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

Імена стовпців, на які містяться посилання в реченні ORDER BY, повинні однозначно відповідати колонки в списку вибору або колонки, визначеним в таблиці, зазначеної в пропозиції FROM.

Вказує, що операція ORDER BY повинна виконуватися відповідно до параметрів сортування, зазначеними в аргументі collation_name. але не у відповідності з параметрами сортування стовпця, визначеними в таблиці або поданні. Значення collation_name може бути ім'ям параметрів сортування Windows або ім'ям параметрів сортування SQL. Додаткові відомості див. У розділі Підтримка параметрів сортування і Юникода. Аргумент COLLATE застосовується тільки до стовпців типу char. varchar. nchar і nvarchar.

Вказує порядок сортування значень у вказаному стовпці - по зростанням або за спаданням. Значення ASC сортує від низьких значень до високих. Значення DESC сортує від високих значень до низьких. Порядок сортування копій - ASC. Значення NULL розглядаються як мінімально можливі значення.

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

offset_row_count_expression може бути змінної, параметром або вкладеним запитом, що повертає скалярную константу. При використанні вкладеного запиту він не повинен посилатися на будь-які стовпці, певні в області зовнішнього запиту. Іншими словами, він не може корелювати з зовнішнім запитом.

ROW і ROWS є синонімами і зберігаються для зворотної сумісності зі стандартом ANSI.

У плані виконання запиту значення зсуву рядка відображається в атрибуті Offset оператора запиту TOP.

Вказує число рядків, що повертаються після обробки пропозиції OFFSET. Це значення може бути целочисленной константою або виразом, значення якого більше одиниці або дорівнює одиниці.

fetch_row_count_expression може бути змінної, параметром або вкладеним запитом, що повертає скалярную константу. При використанні вкладеного запиту він не повинен посилатися на будь-які стовпці, певні в області зовнішнього запиту. Іншими словами, він не може корелювати з зовнішнім запитом.

FIRST і NEXT є синонімами і передбачені для сумісності зі стандартом ANSI.

ROW і ROWS є синонімами і зберігаються для зворотної сумісності зі стандартом ANSI.

У плані виконання запиту значення зсуву рядка відображається в атрибуті Rows або Top оператора запиту TOP.

Уникайте вказівки стовпців в реченні ORDER BY по їх порядковому номеру в списку вибору. Наприклад, хоча інструкція SELECT ProductID, Name FROM Production.Production ORDER BY 2 вірна, вона буде не дуже зрозуміла іншим користувачам в порівнянні з тим випадком, коли стовпчики вказані по іменах. Крім того, якщо список вибору зміниться, зокрема зміниться порядок шпальти чи будуть додані нові стовпчики, то це зажадає зміни пропозиції ORDER BY щоб уникнути непередбачених результатів.

В інструкції SELECT TOP (N) завжди вказуйте пропозицію ORDER BY. Це єдиний спосіб передбачуваним чином відзначити рядки, які були оброблені пропозицією TOP. Додаткові відомості див. У розділі TOP (Transact-SQL).

При використанні в інструкції SELECT. INTO пропозиції ORDER BY для вставки рядків з іншого джерела вставка рядків у зазначеному порядку не гарантується.

Використання OFFSET і FETCH в поданні не приведе до зміни його властивості Updateability.

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

Стовпці типів ntext. text. image. geography. geometry і xml не можуть бути вказані в пропозиції ORDER BY.

Не можна вказувати ціле число або константу, якщо аргумент order_by_expression присутній в ранжир функції. Додаткові відомості див. У розділі Пропозиція OVER (Transact-SQL).

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

Імена та псевдоніми стовпців, зазначені в пропозиції ORDER BY, повинні бути визначені в списку вибору, якщо інструкція SELECT містить одну з таких пропозицій або операторів:

Крім того, якщо в інструкцію входить оператор UNION, EXCEPT або INTERSECT, то імена та псевдоніми стовпців повинні бути вказані в списку вибору першого (зліва) запиту.

У запиті, що містить оператор UNION, EXCEPT або INTERSECT, пропозиція ORDER BY допускається тільки в кінці інструкції. Це обмеження застосовується тільки при використанні операторів UNION, EXCEPT і INTERSECT в запитах верхнього рівня, але не у вкладених запитах. Див підрозділ «Приклади» нижче.

Пропозиція ORDER BY неприпустимо в уявленнях, вбудовані функції, похідних таблицях і вкладених запитах, якщо також не вказані пропозиції TOP або OFFSET і FETCH. У цих об'єктах пропозицію ORDER BY використовується тільки для визначення рядків, що повертаються пропозицією TOP або OFFSET і FETCH. Пропозиція ORDER BY не гарантує упорядкування результатів при запиті цих конструкцій, якщо воно не зазначено в самому запиті.

Пропозиції OFFSET і FETCH не підтримуються в індексованих уявленнях і уявленнях, визначених з пропозицією CHECK OPTION.

Пропозиції OFFSET і FETCH можуть бути використані в будь-який запит, що допускає застосування TOP і ORDER BY, з наступними обмеженнями.

Пропозиція OVER не підтримує OFFSET і FETCH.

Пропозиції OFFSET і FETCH не можуть бути вказані прямо в інструкціях INSERT, UPDATE, MERGE і DELETE, але можуть бути вказані у вкладених запитах, які визначаються цими інструкціями. Наприклад, в інструкції INSERT INTO SELECT пропозиції OFFSET і FETCH можуть бути вказані в інструкції SELECT.

У запиті, що містить оператор UNION, EXCEPT або INTERSECT, пропозиції OFFSET і FETCH можуть бути вказані тільки в кінцевому запиті, який визначає порядок проходження результатів запиту.

TOP можна поєднувати з OFFSET і FETCH в одному вираженні запиту (в тій же області запиту).

Для розбиття на сторінки і обмеження числа рядків, що передаються клієнтського додатку, рекомендується скористатися послугами OFFSET і FETCH, а не пропозицією TOP.

Застосування в якості рішення для розбиття на сторінки пропозицій OFFSET і FETCH потребують одноразового виконання запиту для кожної «сторінки» даних, що повертаються клієнтського додатку. Наприклад, щоб повернути результати запиту блоками по 10 рядків, необхідно виконати запит для отримання рядків з 1 по 10, потім ще раз для отримання рядків з 11 по 20 і так далі. Кожен запит виконується незалежно і ніяким чином не пов'язаний з іншими запитами. Це означає, що на відміну від використання курсора, де запит виконується всього один раз, а поточний стан зберігається на сервері, за відстеження стану відповідає клієнтську програму. Щоб домогтися стабільних результатів між запитами з пропозиціями OFFSET і FETCH, повинні виконуватися наступні умови.

Базові дані, використовувані запитом, повинні бути незмінними. Іншими словами, або рядки, оброблені запитом, не повинні оновлюватися, або всі запити сторінок виконуваного запиту повинні виконуватися в одній транзакції, що використовує моментальний знімок або Серіалізуемое ізоляцію транзакції. Додаткові відомості про рівні ізоляції транзакцій см. В розділі SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

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

Див. Приклад «Виконання декількох запитів в одній транзакції» в підрозділі «Приклади» нижче в цьому розділі.