加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2021-01-11 19:35:18 所属栏目:MsSql教程 来源:网络整理
导读:I understand that you cannot have在视图中订购. (至少在我正在使用的SQL Server 2012中) 我也理解排序视图的“正确”方法是在查询视图的SELECT语句周围放置一个ORDER BY. 但是对于实用SQL和视图的使用相对较新,我想了解为什么这样做是通过设计完成的.如果我

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.

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

(编辑:新余站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读