Sql Server 2008视图中的ORDER BY

eid*_*lon 11 sql t-sql view sql-order-by sql-server-2008

我们的数据库中有一个ORDER BY的视图.现在,我意识到观点通常不会排序,因为不同的人可能会将它用于不同的事情,并希望它有所不同.然而,该视图用于需要特定订单的非常特定的用例.(这是足球联赛的球队排名.)

该数据库是Windows Server 2003 R2上的Sql Server 2008 Express,v.10.0.1763.0.

视图定义如下:

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
Run Code Online (Sandbox Code Playgroud)

它返回:

GENDER, TEAMYEAR, CODE, TEAMID, CLUB, NAME,  
WINS, LOSSES, TIES, GOALS_FOR, GOALS_AGAINST,  
DIFFERENTIAL, POINTS, FORFEITS, RANKING
Run Code Online (Sandbox Code Playgroud)

现在,当我对视图运行SELECT时,它按GENDER,TEAMYEAR,CODE,TEAMID命令结果.请注意,它是按TEAMID而不是POINTS排序,因为order by子句指定.

但是,如果我复制SQL语句并完全按照新查询窗口中的方式运行它,它将按照ORDER BY子句的指定正确排序.

gbn*_*gbn 19

SQL Server 2005在设计上忽略了TOP 100 PERCENT.

请尝试使用TOP 2000000000.

现在,我会尝试找一个参考资料......我参加了由Itzak Ben-Gan提出的研讨会

发现一些......

Kimberly L. Tripp

"前100%的秩序被认为是有害的"

在这种特殊情况下,优化器会识别TOP 100 PERCENT限定所有行,并且根本不需要计算.


Ed *_*per 19

ORDER BY从不保证具有子句的视图返回的行的顺序.如果需要特定的行顺序,则必须指定从视图中选择的位置.

请参阅本书在线条目顶部的注释.