0

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

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

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

那么这里发生了什么?

4

3 回答 3

3

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

Select ...
From MyView
Order By SortByCol ASC

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

Select TOP 100 PERCENT * Col1, Col2....
From Table1
Order By SortByCol ASC
于 2010-04-09T22:21:05.750 回答
0

通常,无法对视图进行排序。

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

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

当您关闭选项卡时,EM 不会记住您对该视图的排序首选项,因此当您再次打开该视图时,它会以 SQL Server 决定的任何顺序出现。

于 2010-04-09T22:16:16.350 回答
0

它似乎 :

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 有效。

高温高压

于 2010-04-09T22:23:13.967 回答