Подтвердить что ты не робот

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.

4b9b3361

Ответ 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

К сожалению, я только заметил, что на это уже был дан ответ. Но проверить сравнительную демонстрацию стоит посмотреть в любом случае.

Ответ 6

запустите трассировку профилировщика в вашей базе данных и посмотрите запрос на самом деле при запросе вашего представления.

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

Ответ 7

Я нашел альтернативное решение.

Мой первоначальный план состоял в том, чтобы создать столбец "sort_order", который не позволит пользователям выполнять сложный вид.

Я использовал оконную функцию ROW_NUMBER. В предложении ORDER BY я задал порядок сортировки по умолчанию, который мне нужен (точно так же, как это было бы в ORDER BY оператора SELECT).

Я получаю несколько положительных результатов:

  • По умолчанию данные возвращаются в порядке сортировки по умолчанию, который я изначально планировал (возможно, это связано с тем, что оконная функция должна сортировать данные до назначения значения sort_order)

  • Другие пользователи могут сортировать данные альтернативными способами, если они выбирают

  • Столбец sort_order существует для очень конкретной необходимости сортировки, что облегчает пользователям сортировку данных, если какой-либо инструмент, который они используют, упорядочивает набор строк.

Примечание. В моем конкретном приложении пользователи получают доступ к представлению через Excel 2010, и по умолчанию данные предоставляются пользователю, как я надеялся, без дальнейшей сортировки.

Надеемся, что это поможет тем, у кого есть аналогичная проблема.

Cheers, Райан