我在 SQL 中创建了一个由 3 个表组成的简单视图。
通过右键单击并选择设计,在对象资源管理器表中,我修改了我的自定义视图。我刚刚在一个字段中添加了 sortby asc 。
问题是这些变化没有反映在视图的输出中。保存视图并选择打开视图后,排序不会显示在输出中。
那么这里发生了什么?
我在 SQL 中创建了一个由 3 个表组成的简单视图。
通过右键单击并选择设计,在对象资源管理器表中,我修改了我的自定义视图。我刚刚在一个字段中添加了 sortby asc 。
问题是这些变化没有反映在视图的输出中。保存视图并选择打开视图后,排序不会显示在输出中。
那么这里发生了什么?
从技术上讲,可以将排序烘焙到 a 中VIEW
,但非常不鼓励这样做。相反,您应该在从视图中选择时应用排序,如下所示:
Select ...
From MyView
Order By SortByCol ASC
如果你真的想知道(但同样,我强烈建议不要这样做),你可以使用 TOP 命令来绕过视图中排序的限制:
Select TOP 100 PERCENT * Col1, Col2....
From Table1
Order By SortByCol ASC
通常,无法对视图进行排序。
(正如其他人提到的,有一个 hack 可以做到这一点,但由于您使用的是可视化查询设计器而不是用 SQL 编写视图定义,因此可能很难实现该 hack。)
您实际上并没有“修改”您的视图,您只是更改了 EM 用来从您的视图中选择的 SELECT 语句。排序设置不会保留在视图定义中。
当您关闭选项卡时,EM 不会记住您对该视图的排序首选项,因此当您再次打开该视图时,它会以 SQL Server 决定的任何顺序出现。
它似乎 :
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 有效。
高温高压