ORDER BY в представлении Sql Server 2008
У нас есть представление в нашей базе данных, в которой есть ORDER BY.
Теперь я понимаю, что взгляды вообще не заказывают, потому что разные люди могут использовать его для разных вещей и хотят, чтобы это было по-другому. Однако этот взгляд используется для использования ОЧЕНЬ СПЕЦИФИЧНЫЙ, который требует определенного порядка. (Это командная таблица для футбольной лиги.)
База данных - это Sql Server 2008 Express, v.10.0.1763.0 в окне Windows Server 2003 R2.
Вид определяется как таковой:
CREATE VIEW season.CurrentStandingsOrdered
AS
SELECT TOP 100 PERCENT *, season.GetRanking(TEAMID) RANKING
FROM season.CurrentStandings
ORDER BY
GENDER, TEAMYEAR, CODE, POINTS DESC,
FORFEITS, GOALS_AGAINST, GOALS_FOR DESC,
DIFFERENTIAL, RANKING
Он возвращает:
GENDER, TEAMYEAR, CODE, TEAMID, CLUB, NAME,
WINS, LOSSES, TIES, GOALS_FOR, GOALS_AGAINST,
DIFFERENTIAL, POINTS, FORFEITS, RANKING
Теперь, когда я запускаю SELECT против представления, он заказывает результаты с помощью GENDER, TEAMYEAR, CODE, TEAMID. Обратите внимание, что он упорядочивает TEAMID вместо POINTS, как указано в предложении order by.
Однако, если я скопирую инструкцию SQL и запустил ее точно так же, как в новом окне запроса, она правильно упорядочивается, как указано в предложении ORDER BY.
Ответы
Ответ 1
Порядок строк, возвращаемых представлением с предложением ORDER BY
, никогда не гарантируется. Если вам нужен определенный порядок строк, вы должны указать, где вы выбираете из представления.
Посмотрите на эту заметку в верхней части в этой книге On-Line.
Ответ 2
SQL Server 2005 игнорирует TOP 100 PERCENT по дизайну.
Попробуйте TOP 2000000000 вместо этого.
Теперь я попробую найти ссылку... Я был на семинаре, представленном Ицаком Бен-Ганом, который упомянул об этом
Найдено несколько...
Кимберли Л. Трипп
"TOP 100% ORDER BY считается вредным"
В этом конкретном случае оптимизатор признает, что TOP 100 PERCENT квалифицирует все строки и не нуждается для вычисления вообще.
Ответ 3
Просто используйте:
" Верх (99) Процент"
или
"Top (число в 1000 раз больше, чем ваши строки данных, такие как 24682468123)" оно работает! просто попробуйте.
Ответ 4
В SQL Server 2008 ORDER BY игнорируется в представлениях, которые используют TOP 100 PERCENT. В предыдущих версиях SQL-сервера ORDER BY разрешался только при использовании TOP 100 PERCENT, но безупречный порядок никогда не гарантировался. Однако многие предполагали, что идеальный порядок гарантирован. Я полагаю, что Microsoft не хочет вводить в заблуждение программистов и администраторов баз данных, полагая, что существует гарантированный порядок использования этой техники.
Отличную сравнительную демонстрацию этой неточности можно найти здесь...
http://blog.sqlauthority.com/2009/11/24/sql-server-interesting-observation-top-100-percent-and-order-by
К сожалению, я только заметил, что на это уже был дан ответ. Но проверить сравнительную демонстрацию стоит посмотреть в любом случае.
Ответ 5
Microsoft установила это. Вы устанавливаете свой сервер sql
http://support.microsoft.com/kb/926292
Ответ 6
запустите трассировку профилировщика в вашей базе данных и посмотрите запрос на самом деле при запросе вашего представления.
Вы также можете захотеть использовать хранимую процедуру для возврата данных из вашего представления, правильно упорядоченных для вашего конкретного варианта использования.
Ответ 7
Я нашел альтернативное решение.
Мой первоначальный план состоял в том, чтобы создать столбец "sort_order", который не позволит пользователям выполнять сложный вид.
Я использовал оконную функцию ROW_NUMBER. В предложении ORDER BY я задал порядок сортировки по умолчанию, который мне нужен (точно так же, как это было бы в ORDER BY оператора SELECT).
Я получаю несколько положительных результатов:
-
По умолчанию данные возвращаются в порядке сортировки по умолчанию, который я изначально планировал (возможно, это связано с тем, что оконная функция должна сортировать данные до назначения значения sort_order)
-
Другие пользователи могут сортировать данные альтернативными способами, если они выбирают
-
Столбец sort_order существует для очень конкретной необходимости сортировки, что облегчает пользователям сортировку данных, если какой-либо инструмент, который они используют, упорядочивает набор строк.
Примечание. В моем конкретном приложении пользователи получают доступ к представлению через Excel 2010, и по умолчанию данные предоставляются пользователю, как я надеялся, без дальнейшей сортировки.
Надеемся, что это поможет тем, у кого есть аналогичная проблема.
Cheers,
Райан