2010-04-09 71 views
0

我创建了一个包含3个SQL表的简单视图。SQL。按字段排序

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

问题是,更改不反映在视图的大小。 保存视图并选择打开视图后,排序不会显示在输出中。

那么这里发生了什么?

回答

3

从技术上讲,它可以烘烤排序到VIEW,但它是非常不鼓励。相反,你应该申请排序,而从像这样的视图中选择:

Select ... 
From MyView 
Order By SortByCol ASC 

如果你真的想知道(但同样,我会强烈反对这一点),你可以使用TOP命令,以绕过限制在视图排序:

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

一般,视图无法排序。

(如其他人所说,有一个黑客做到这一点,但因为你正在使用一个可视化查询设计器,而不是写在SQL视图定义,它可能难以实现该黑客。)

你没”实际上“修改”你的视图,你只改变了EM使用的SELECT语句来选择你的看法。排序设置不保留在视图定义中。

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

0

看来:

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

还有一个需要应用的修补程序。之后,您应该使用Top 100%来确保按顺序工作。

HTH