使用SQL Server时必须注意的10个特性:在嵌套中使用ORDER BY

日期: 2013-09-16 作者:Alex Bolenok 来源:TechTarget中国

使用SQL Server时必须注意的10个特性:在嵌套中使用ORDER BY 

 

SQL Server在嵌套查询中并不支持ORDER BY。以下查询不会起作用:

SELECT *

FROM (

SELECT *

FROM mytable

WHERE col1 = 42

ORDER BY

id

) q

这一行为没有在标准中进行定义并且是特定于SQL Server的。

在嵌套查询和内联(单查询)表值函数中,ORDER BY并不受支持,除非在SELECT中使用TOP。

SQL并不保证记录的顺序,除非你用ORDER BY对其进行显式定义,这也就是ORDER BY在一个嵌套查询中意义不大的原因。如果你想要特定的顺序,那么你就应该在最外层查询中加以指定。

然而,这有可能会破坏从其他引擎移植过来的查询。正常情况下,嵌套查询中是允许有ORDER BY的,并且要么将其传导至最外层查询(如Oracle中一般),要么就不对顺序做任何假定(例如,ORDER BY会默认忽略)。

别无他法,只能更改嵌入查询,要么移除ORDER BY如下:

SELECT *

FROM (

SELECT *

FROM mytable

WHERE col1 = 42

) q

要么添加TOP 100 PERCENT如下:

SELECT *

FROM (

SELECT TOP 100 PERCENT

*

FROM mytable

WHERE col1 = 42

ORDER BY

id

) q

两种解决方案都会让优化引擎忽略ORDER BY。

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐