SQL Server视图中是否支持ORDER BY语句?

6

使用SqlServer视图的缺点中,hyprsleepy在这个答案中指出,在SQL Server中的视图中不会遵守ORDER BY子句。

有人能解释一下为什么会这样吗?

编辑:谢谢大家的回答,但我不确定那是问题所在。我知道你不能向视图添加Order By子句,我对此没有问题,只需在调用视图时将其添加到SELECT语句中即可,但从其他问题中得出的印象是,在SELECT语句中使用Order By子句将不会每次都给出正确的结果。


+1 对于这个问题。顺便说一句,对我来说,视图不排序是很有道理的。 - Adriano Carneiro
我同意,这就是我感到困惑的原因。 - Toby Allen
5个回答

8

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

视图可能用于连接或其他操作,这会使它们的顺序无效。

由于您不能单独使用视图,即您不写vMyView,而是写SELECT * FROM vMyView,尽管视图本身是一个SELECT,如果您需要排序,也可以(并且应该)在SELECT语句中附加ORDER BY子句。

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


3

你的 SELECT 语句中的 ORDER BY 子句总是被正确执行吗? - Toby Allen
是的,就这样做:select <SomeColumns> from view order by <SomeColumns> - SQLMenace
好的 - 就我而言没有问题,我似乎误解了对另一个问题的回答。 - Toby Allen

2
在你的视图定义中,加入 TOP 100 PERCENT 作为一种解决方法。接着可以使用 ORDER BY。编辑或者如 SQLMenace 指出的那样,使用 TOP 99.99 PERCENT。

1
在2005年及以后的版本中不起作用,请参见此处:http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/create-a-sorted-view-in-sql-server-2005--2008 - SQLMenace
这就是原因:http://blogs.msdn.com/b/queryoptteam/archive/2006/03/24/560396.aspx - Robert Kaucher

1

来自wikipedia

正如基本表中的行缺乏任何定义的排序一样,通过视图可用的行也不会出现任何默认排序。视图是一个关系表,而关系模型将表定义为一组行。由于集合按定义无序,因此视图中的行也没有顺序。因此,视图定义中的ORDER BY子句是没有意义的。


0

在视图中不能使用ORDER BY子句。具体错误如下:

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


你可以创建它...但在2005年及以上版本中它不会有任何作用,请参见:http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/create-a-sorted-view-in-sql-server-2005--2008 - SQLMenace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接