sql-server – 为什么ORDER BY不属于View?

前端之家收集整理的这篇文章主要介绍了sql-server – 为什么ORDER BY不属于View?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
I understand that you cannot have在视图中订购. (至少在我正在使用的sql Server 2012中)

我也理解排序视图的“正确”方法是在查询视图的SELECT语句周围放置一个ORDER BY.

但是对于实用sql和视图的使用相对较新,我想了解为什么这样做是通过设计完成的.如果我正确地遵循了历史记录,这曾经是可能的,并且明确地从sql Server 2008中删除了等等(不要在确切的版本上引用我).

但是,我可以想出微软为什么删除功能的最佳原因是“视图是未分类的数据集合”.

我假设有一个很好的,逻辑上的原因,为什么一个视图应该未分类.为什么视图不能成为扁平化的数据集合?为什么特意没有排序?似乎很难想出(至少对于我/恕我直言)看起来非常直观的情况.

解决方法

(当然,抛开索引的观点.)

视图未实现 – 数据未存储,因此如何对其进行排序?视图有点像只包含没有参数的SELECT的存储过程……它不包含数据,它只保存查询的定义.由于对视图的不同引用可能需要以不同方式排序数据,因此您执行此操作的方式 – 就像从表中选择一样,根据定义也是未排序的行集合 – 就是在外部查询中包含order by .

还要对历史有所了解.你永远不能在视图中放置ORDER BY,而不包括TOP.在这种情况下,ORDER BY指定TOP包含哪些行,而不是如何呈现它们.碰巧在sql Server 2000中,如果TOP为100 PERCENT或{某个数字> =表中的行数},优化器相当简单,最终生成了一个与TOP /匹配的计划订购.但是这种行为从未得到保证或记录 – it was just relied upon based on observation,which is a bad habit.当sql Server 2005问世时,由于优化器中的更改导致使用不同的计划和运算符,这种行为开始“破坏” – 除其他外,TOP / ORDER BY会如果它是百分之百被完全忽略.一些客户如此大声地抱怨这一点,微软发布了一个跟踪标志来恢复旧的行为.我不打算告诉你标志是什么,因为我不想让你使用它,我想确保意图是正确的 – 如果你想要一个可预测的排序顺序,在外部查询上使用ORDER BY.

总结并同样澄清你提出的一点:微软没有删除任何东西.他们使产品更好,并且作为副作用,这种无证的,无保证的行为变得不那么可靠.总的来说,我认为该产品更适合它.

猜你在找的MsSQL相关文章