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

Теперь, когда я бегуВЫБРАТЬ напротив, он упорядочивает результаты поГЕНДЕР, КОМАНДА, КОД, КОМАНДА, Обратите внимание, что это заказTeamID вместоТОЧКИ как указано в порядке заказа.

Тем не менее, если я скопирую инструкцию SQL и выполню ее точно так же, как в новом окне запроса, он упорядочится правильно, как указано вСОРТИРОВАТЬ ПО пункт.

Ответы на вопрос(7)

Попробуйте TOP 2000000000 вместо этого.

Теперь я попытаюсь найти ссылку ... Я был на семинаре, представленном Ицаком Бен-Ганом, который упомянул об этом

Нашел немного ...

Кимберли Л. Трипп

"ТОП 100 процентов, ПОРЯДОК Считается вредным"

В этом конкретном случае оптимизатор распознает, что TOP 100 PERCENT квалифицирует все строки и вообще не нуждается в вычислении.

 gbn13 февр. 2012 г., 16:41
@ MitchWheat: Ты прав, я неправильно понял. Связанные с этимsqlblog.com/blogs/tibor_karaszi/archive/2007/11/28/... который упоминает HF. Много комментариев
 Mitch Wheat13 февр. 2012 г., 16:31
Я не уверен, что это так. Кажется, говорят, что применение исправления гарантирует, что ORDER BY в представлениях всегда работает (что явно противоречит статье MSDN (и, возможно, здравому смыслу!))
 gbn13 февр. 2012 г., 16:13
@ MitchWheat: да, выглядит знакомо. Я думаю, это означает, что внутренний TOP .. ORDER BY fubars внешний ORDER BY
 Mitch Wheat13 февр. 2012 г., 16:09
Меня интересует это исправление SQL Server, с которым я только что наткнулся:support.microsoft.com/kb/926292 : если я правильно читаю, то исправление «исправляет» поведение для сортировки?

"Верх (99) процентов "

или же

"Top (число в 1000 раз больше, чем ваши строки данных, такие как 24682468123)" это работает! просто попробуйте.

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

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

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

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

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

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

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

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

Ура, Райан

которые используют 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

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

Решение Вопроса

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

Смотрите эту заметку в верхней частиэта книга онлайн запись.

 eidylon20 авг. 2009 г., 16:27
Это раздражает! Я могу видеть / понимать не гарантируя это в VIEW, вроде ... но это должно, по крайней мере, работать в табличной функции. GRRR. В любом случае, спасибо за ответ. :)

рос, которыйфактически запускается, когда вы запрашиваете ваше мнение.

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

 eidylon20 авг. 2009 г., 16:30
Да, я действительно искал что-то напрямую запрашиваемое, хотя ... представление, табличную функцию, которой не является sproc.

Ваш ответ на вопрос