请教高手~~~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
這都是沒有問題的。