一尘不染

在Sql Server 2008视图中执行ORDER BY

sql

我们在数据库中有一个视图,其中有一个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 子句指定的顺序正确 排序


阅读 152

收藏
2021-03-10

共1个答案

一尘不染

带有ORDER BY子句的视图返回的行的顺序永远无法保证。如果需要特定的行顺序,则必须指定从视图中选择的位置。

请参阅此联机丛书条目顶部的注释。

2021-03-10