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提出的研讨会
发现一些......
在这种特殊情况下,优化器会识别TOP 100 PERCENT限定所有行,并且根本不需要计算.