在使用SqlServer视图的缺点中,hyprsleepy在这个答案中指出,在SQL Server中的视图中不会遵守ORDER BY
子句。
有人能解释一下为什么会这样吗?
编辑:谢谢大家的回答,但我不确定那是问题所在。我知道你不能向视图添加Order By
子句,我对此没有问题,只需在调用视图时将其添加到SELECT
语句中即可,但从其他问题中得出的印象是,在SELECT
语句中使用Order By
子句将不会每次都给出正确的结果。
在使用SqlServer视图的缺点中,hyprsleepy在这个答案中指出,在SQL Server中的视图中不会遵守ORDER BY
子句。
有人能解释一下为什么会这样吗?
编辑:谢谢大家的回答,但我不确定那是问题所在。我知道你不能向视图添加Order By
子句,我对此没有问题,只需在调用视图时将其添加到SELECT
语句中即可,但从其他问题中得出的印象是,在SELECT
语句中使用Order By
子句将不会每次都给出正确的结果。
SQL Server
开发人员认为任何集合操作都可能改变记录的顺序,因此在中间集合定义中使用ORDER BY
没有意义,只有在最终语句中才有意义。
视图可能用于连接或其他操作,这会使它们的顺序无效。
由于您不能单独使用视图,即您不写vMyView
,而是写SELECT * FROM vMyView
,尽管视图本身是一个SELECT
,如果您需要排序,也可以(并且应该)在SELECT
语句中附加ORDER BY
子句。
这是一个非常明智的假设,实际上它使代码更加清晰。
请看 在SQL Server 2005和SQL Server 2008中创建排序视图
有一种方法可以做到这一点,但不受支持,只需在从视图选择时发出order by命令即可
SELECT
语句中的 ORDER BY
子句总是被正确执行吗? - Toby Allenselect <SomeColumns> from view order by <SomeColumns>
。 - SQLMenace来自wikipedia:
正如基本表中的行缺乏任何定义的排序一样,通过视图可用的行也不会出现任何默认排序。视图是一个关系表,而关系模型将表定义为一组行。由于集合按定义无序,因此视图中的行也没有顺序。因此,视图定义中的ORDER BY子句是没有意义的。
在视图中不能使用ORDER BY子句。具体错误如下:
"在视图、内联函数、派生表、子查询和公共表达式中,除非还指定了TOP或FOR XML,否则ORDER BY子句无效。"