我们在数据库中有一个视图,其中有一个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
它返回:
GENDER, TEAMYEAR, CODE, TEAMID, CLUB, NAME, WINS, LOSSES, TIES, GOALS_FOR, GOALS_AGAINST, DIFFERENTIAL, POINTS, FORFEITS, RANKING
现在,当我对视图运行 SELECT时 ,它按 GENDER,TEAMYEAR,CODE,TEAMID排序结果 。注意,它是按 TEAMID 排序的,而不是order by子句指定的 POINTS 的排序。
但是,如果我复制SQL语句并完全按照新查询窗口中的方式运行它,则它会按 ORDER BY 子句指定的顺序正确 排序 。
带有ORDER BY子句的视图返回的行的顺序永远无法保证。如果需要特定的行顺序,则必须指定从视图中选择的位置。
ORDER BY
请参阅此联机丛书条目顶部的注释。