SQL Server错误:无法对大小为x的行进行排序,这大于允许的最大值8094.但我没有排序

Cor*_*use 1 database sql-server sql-server-7

据我所知,"不能排序大小为9754的行,这大于允许的最大值8094".来自SQL Server的是由一行中有超过9k个字符的行引起的,这个行大于SQL Server 7中的页面大小限制.但是我没有通过下面的数据调用一个命令,所以为什么错误说它不能排序?

SELECT <a number of columns...>
FROM Category10Master c10
JOIN Category20Master c20 ON c10.Cat10ID = c20.ParentCatID 
JOIN Category25Master c25 ON c20.Cat20ID = c25.ParentCatID 
JOIN Category30Master c30 ON c25.Cat25ID = c30 .ParentCatID 
JOIN Item i ON c30.Cat30ID = i.ParentCatID
Run Code Online (Sandbox Code Playgroud)

编辑:是的,我知道我可以调用更少的列来解决这个问题 - 实际的查询显式调用所需的列,但仍超过行大小限制.这实际上是在一个被称为站点范围的视图中,因此更改视图以缩回更少的列不是一个有吸引力的选项 - 需要修改数十个页面以从视图以外的其他位置获取数据.我不幸的是已经把一个丑陋的设计搞得一团糟,我希望有人能提供比吸引更少数据更有吸引力的解决方案.

And*_*rew 5

检查排序的估计查询计划,例如,执行其中一个可能选择合并连接的连接,并且为了实现这一点,它需要在合并之前首先对数据进行排序 - 此时您已经排序.

  • 我对SQL Server 6中的提示的记忆(假设你的帖子中是正确的)只是不准确,在2005年你可以覆盖连接机制,通常通过编写内部循环连接,内部合并连接来支付性能价格,内部散列连接或内部远程连接(最后一个用于链接服务器).我不知道内循环连接是否会在6中变成owrk,它甚至可能不是合法的语法.这是一个真正的黑客,但可能会让你前进一点. (2认同)