请教高手~~~Sql2000 中 order by 的机制问题。
现在遇到一个问题, 当数据量很大 加上order by以后会报字节数超长的错误 代码如下:
CREATE TABLE t1 (id INT IDENTITY(1,1), c1 VARCHAR(8000))
CREATE TABLE t2 (id INT IDENTITY(1,1), c2 VARCHAR(8000))
INSERT INTO t1 (c1)
SELECT REPLICATE( 'a ', 8000) UNION ALL
SELECT REPLICATE( 'a ', 8000) UNION ALL
SELECT REPLICATE( 'a ', 8000) UNION ALL
SELECT REPLICATE( 'a ', 8000) UNION ALL
SELECT REPLICATE( 'a ', 8000) UNION ALL
SELECT REPLICATE( 'a ', 8000) UNION ALL
SELECT REPLICATE( 'a ', 8000)
INSERT INTO t2 (c2)
SELECT REPLICATE( 'b ', 8000) UNION ALL
SELECT REPLICATE( 'b ', 8000) UNION ALL
SELECT REPLICATE( 'b ', 8000) UNION ALL
SELECT REPLICATE( 'b ', 8000) UNION ALL
SELECT REPLICATE( 'b ', 8000) UNION ALL
SELECT REPLICATE( 'b ', 8000) UNION ALL
SELECT REPLICATE( 'b ', 8000)
SELECT *
FROM t1
JOIN t2 ON t1.id = t2.id
ORDER BY c1, c2 desc
DROP TABLE t1
DROP TABLE t2
如果上述例子中把order by 去掉或者换成id 都是对的 。
我查过文档确实说用order by对临时表的行size有限制的 。
但是这里我不明白的是 , 为什么order by 还成id 就对了呢? 一行长度也没有变啊 还有文档里说的临时表结构会是什么样的呢? 还有这个问题如何解决比较好呢?
谢谢。
[解决办法]
助中有
使用 ORDER BY 排序料列
ORDER BY 子句可使用一或多料行 (最多 8,060 位元) 排序 (Sort) 查果。.如需有 ORDER BY 子句最大大小的, SELECT_SELECT。
排序可增 (ASC,Ascending) 或 (DESC,Descending),若任何序都有指定,用 ASC。
[解决办法]
ORDER BY c1, c2 desc
列加起超了8,060 位元,所以就。
如果你使用其中一列排序,就有。
SELECT *
FROM t1
JOIN t2 ON t1.id = t2.id
ORDER BY c2 desc
SELECT *
FROM t1
JOIN t2 ON t1.id = t2.id
ORDER BY c1
都是有的。