【问题标题】:Is ORDER BY honoured in SQL Server views?在 SQL Server 视图中是否支持 ORDER BY?
【发布时间】:2011-08-19 13:59:14
【问题描述】:

this answerWhat are the downsides of using SqlServer Views? 中,hyprsleepy 建议在 SQL Server 的视图中不支持 ORDER BY 子句。

谁能解释为什么会这样?

编辑:感谢您的回答,但我不确定这是否是问题所在。我知道您不能将 Order By Clause 添加到视图中,我对此没有任何问题,您只需在调用视图时将其添加到 SELECT 语句中,但我对另一个问题的印象是使用 Order By Clause在视图上的 SELECT 语句中不会每次都给出正确的结果。

【问题讨论】:

  • +1 对于这个问题。顺便说一句,对我来说,不订购视图非常有意义
  • 我同意,这就是我感到困惑的原因。

标签: sql-server views sql-order-by


【解决方案1】:

在您的视图定义中包含 TOP 100 PERCENT 作为解决方法。然后您可以使用 ORDER BY。

编辑或 SQLMenace 指出 TOP 99.99 PERCENT。

【讨论】:

【解决方案2】:

SQL Server 开发人员假设任何集合操作都可能改变记录的顺序,因此在中间集合定义中使用 ORDER BY 没有意义,它只在最终语句中有意义。

视图可用于连接或其他使其顺序无效的操作。

由于您不能单独使用视图,i。 e.你不写vMyView,你宁愿写SELECT * FROM vMyView,尽管视图本身是SELECT,你也可以(并且应该)将ORDER BY子句附加到SELECT语句如果您需要订购。

这是一个非常合理的假设,实际上它使代码更加清晰。

【讨论】:

    【解决方案3】:

    看看Create a sorted view in SQL Server 2005 and SQL Server 2008

    有办法,但不支持,在视图中选择时下单即可

    【讨论】:

    • 是您的SELECT 语句中的 ORDER BY 子句始终正确执行吗?
    • 是的,所以只需select <SomeColumns> from view order by <SomeColumns>
    • 好的 - 就我而言没有问题,我似乎误解了另一个问题的答案。
    【解决方案4】:

    来自wikipedia

    就像基表中的行缺少任何 定义的顺序,可用的行 通过视图不出现任何 默认排序。视图是一个 关系表和关系表 模型将表定义为一组 行。由于集合没有排序 - 按 定义 - 视图中的行是 也没有订购。因此,一个 视图定义中的 ORDER BY 子句 毫无意义。

    【讨论】:

      【解决方案5】:

      您不能在视图中添加 ORDER BY 子句。确切的错误是:

      “ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML。”

      【讨论】:

      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 2021-03-03
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      相关资源
      最近更新 更多