ORDER BY在SQL Server 2008中视图(ORDER BY in a Sql Serv

2019-07-02 14:22发布

我们在我们的数据库,其中有一个ORDER BY中有一个视图。 现在,我认识的观点一般不订购,因为不同的人可能将其用于不同的事情,并希望它不同的排序。 此视图然而用于这要求一定的顺序一个非常具体的用例。 (这是一个足球联赛车队积分榜。)

该数据库是SQL Server 2008 Express的,在Windows Server 2003 R2的框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,其订单按性别,TEAMYEAR,CODE,TEAMID结果。 请注意,它是由TEAMID作为订单订货 ,而不是由子句指定。

但是,如果我复制的SQL语句,准确地运行它是一个新的查询窗口,它正确地由ORDER BY子句指定的订单。

Answer 1:

通过查看与返回行的顺序ORDER BY子句从来没有保证。 如果你需要一个特定的行顺序,你必须指定你来自哪里,在视图中选择。

看到这个说明在顶部此书在线条目。



Answer 2:

SQL Server 2005的设计忽略了TOP 100个百分点。

尝试TOP 20亿来代替。

现在,我将试图找到一个参考......我是在用谁提到Itzak奔甘提出了一个研讨会

发现了一些...

金伯利L.特里普

“TOP 100%ORDER BY有害”

在这种特殊情况下,优化程序发现TOP 100%的有资格的所有行,并不需要在所有被计算。



Answer 3:

只需使用:

顶(99)百分比

要么

“(比你的数据行一样24682468123更多一些1000次)评出的”它的工作原理! 就试一试吧。



Answer 4:

在SQL Server 2008中,ORDER BY在使用TOP 100%的意见被忽略。 在SQL Server的早期版本中,如果使用TOP 100%的ORDER BY只被允许的,但一个完美的秩序从来无法保证。 然而,许多假设一个完美的秩序得到保障。 我推断,微软并不想误导程序员和DBA相信有一个保证的顺序使用这种技术。

这种不准确性的一个很好的比较论证,可以在这里找到...

http://blog.sqlauthority.com/2009/11/24/sql-server-interesting-observation-top-100-percent-and-order-by

哎呀,我刚才注意到,这已经回答了。 但是检查出来的比较论证是值得一试无妨。



Answer 5:

微软已经修复了这个。 你有补丁的SQL Server

http://support.microsoft.com/kb/926292



Answer 6:

运行数据库上的事件探查器跟踪,看到当你查询你的观点实际上正在运行查询。

您可能还需要考虑使用存储过程从您的观点,您的具体情况使用正确排序返回数据。



Answer 7:

我找到了一个替代的解决方案。

我最初的计划是建立一个“排序顺序”一栏,将防止用户不必进行复杂的排序。

我用了一个窗口函数ROW_NUMBER。 在ORDER BY子句中,我指定的默认排序顺序,我需要(就像它会一直在ORDER BY SELECT语句的)。

我得到了一些积极的成果:

  1. 默认情况下,该数据是越来越在我原本的默认排序顺序返回(这可能是由于对分配SORT_ORDER值有之前对数据进行排序的窗口函数)

  2. 其他用户可以以另一种方式对数据进行排序,如果他们选择

  3. 该SORT_ORDER列是有一个非常具体的某种需要,使它更容易为用户应任何工具,他们使用的重新排列行集中的数据进行排序。

注:在我的具体应用,用户通过Excel 2010中访问视图,默认情况下将数据呈现给用户,因为我已经没有进一步排序需要希望。

希望这可以帮助那些有类似的问题。

欢呼声中,瑞恩



文章来源: ORDER BY in a Sql Server 2008 view