【问题标题】:SQL. Sorting by a fieldSQL。按字段排序
【发布时间】:2010-04-09 22:13:41
【问题描述】:

我在 SQL 中创建了一个由 3 个表组成的简单视图。

通过右键单击并选择设计,在对象资源管理器表中,我修改了我的自定义视图。我刚刚在一个字段中添加了 sortby asc。

问题是变化没有反映在视图的输出中。 保存视图并选择打开视图后,排序不会显示在输出中。

那么这里发生了什么?

【问题讨论】:

    标签: sql sql-server-2005 ssms sql-view


    【解决方案1】:

    从技术上讲,可以将排序烘焙到VIEW,但非常不鼓励这样做。相反,您应该在从视图中选择时应用排序,如下所示:

    Select ...
    From MyView
    Order By SortByCol ASC
    

    如果你真的想知道(但我强烈建议不要这样做),你可以使用 TOP 命令来绕过视图中排序的限制:

    Select TOP 100 PERCENT * Col1, Col2....
    From Table1
    Order By SortByCol ASC
    

    【讨论】:

      【解决方案2】:

      看来:

      SQL Server 2000、SQL 2005 和 SQL 2008 中的视图定义中的 SELECT 子句有限制。CREATE VIEW 语句不能包含 ORDER BY 子句,除非 SELECT 的选择列表中还有 TOP 子句陈述。 ORDER BY 子句仅用于确定视图定义中 TOP 子句返回的行。 ORDER BY 子句不保证查询视图时的有序结果,除非在查询本身中也指定了 ORDER BY。

      还有一个需要应用的修补程序。之后,您应该使用 Top 100% 来确保 order by 有效。

      HTH

      【讨论】:

        【解决方案3】:

        一般情况,视图是不能排序的。

        (正如其他人提到的,有一个 hack 可以做到这一点,但由于您使用的是可视化查询设计器而不是用 SQL 编写视图定义,因此可能很难实现该 hack。)

        您实际上并没有“修改”您的视图,您只是更改了 EM 用来从您的视图中选择 的 SELECT 语句。视图定义中不保留排序设置。

        当您关闭选项卡时,EM 不会记住您对该视图的排序偏好,因此当您再次打开该视图时,它会按照 SQL Server 决定的顺序显示。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-28
          • 2014-03-26
          • 2020-06-17
          • 1970-01-01
          • 2012-11-08
          • 1970-01-01
          • 2016-02-25
          相关资源
          最近更新 更多