代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

如何获得有序视图?

  •  3
  • Jader Dias  · 技术社区  · 14 年前

    我的“观点”是有序的。但是当我使用select来显示结果时,输出会被洗牌。

    SELECT * FROM (SELECT * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE
    

    如何防止这种洗牌?

    3 回复  |  直到 14 年前
        1
  •  2
  •   KM.    14 年前

    你必须只有一个 ORDER BY 在使用视图的最外层选择:

    SELECT * FROM (SELECT * FROM TABLE) AS DERIVEDTABLE ORDER BY YourColumn
    

    SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE
    

    但是,最终排序顺序仍可能根据外部查询而更改,除非您通过以下方式添加另一个顺序:

    SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE
    ORDER BY COLUMNA
    
        2
  •  3
  •   Scottie    14 年前

    很遗憾,无法在SQL Server中对视图进行排序。必须在读取视图的select语句上执行此操作。

    跛子,我知道。

        3
  •  1
  •   Damien_The_Unbeliever    14 年前

    你不能。指定顺序的唯一方法是在查询的最外层请求它——这是order BY用于对最终结果集进行排序的唯一地方。ORDER BY的任何其他用法仅用于帮助其他操作(例如定义使用时的“前10个”是什么 TOP

    SQL Server 2000过去可以被诱骗在视图中应用ORDER BY,不幸的是,Enterprise Manager和SSMS中的视图设计器继续假装这是有效的。但事实并非如此,这可能会为查询优化提供更多的机会。