2010-11-10 2 views
3

Мой «VIEW» заказывается. Но когда я использую select для отображения его результата, вывод перетасовывается. Такое поведение также происходит со следующим утверждениемКак получить упорядоченный вид?

SELECT * FROM (SELECT * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE 

Как предотвратить эту перестановку?

ответ

2

вы должны иметь только ORDER BY на внешний выбора, который использует вид:

SELECT * FROM (SELECT * FROM TABLE) AS DERIVEDTABLE ORDER BY YourColumn 

, если вы используете TOP

SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE 

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

SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE 
ORDER BY COLUMNA 
+0

'TOP 100' работал, но' TOP (100) PERCENT' не –

3

К сожалению, виды не могут быть заказаны в SQL Server. Вы должны сделать это в инструкции select, читающей представление.

Хромой, я знаю.

+0

Но виды можно заказать. Просто внешний выбор поднимает требования к порядку. – Andomar

+1

Вы оба почти правы, обходное решение «TOP 100000000» отлично работает –

1

Вы не можете. Единственный способ указать заказ - запросить его на самом удаленном уровне запроса - это единственное место, где ORDER BY предназначен для заказа окончательного набора результатов. Любое другое использование ORDER BY предназначено только для оказания помощи в других операциях (например, для определения того, что такое «TOP 10» при использовании TOP).

SQL Server 2000 использовался, чтобы быть обманутым в применении ORDER BY в представлении, и, к сожалению, дизайнеры представлений в Enterprise Manager и SSMS продолжают притворяться, что это работает. Это не так. Не позволяя трюку работать дольше, это, по-видимому, открывает больше возможностей для оптимизации запросов.

Смежные вопросы