행 크기 오류 문제 해결
새 설치: 2005년 12월 5일
SQL Server 2005 데이터베이스 엔진에서 식을 평가하기 전에 정렬 작업을 수행하는 경우가 있으므로 SQL Server 2000에서 실행되는 일부 쿼리가 SQL Server 2005에서 오류를 반환할 수 있습니다. 이러한 쿼리는 일반적으로 다음을 지정합니다.
- 결과 집합에서의 매우 긴 char, nchar, varchar 및 nvarchar 필드
- ORDER BY, GROUP BY 및 DISTINCT 절과 같이 데이터베이스 엔진에서 정렬 작업을 시작하도록 만들 수 있는 모든 절 및 SQL Server 쿼리 최적화 프로그램에서 정렬이 필요한 Merge Join 알고리즘을 사용하여 해결하는 JOIN 절
SQL Server 2005 데이터베이스 엔진에서는 쿼리 앞부분에 있는 식을 평가하기 전에 정렬 작업을 수행할 수 있습니다. 이렇게 하려면 데이터베이스 엔진에서 중간 결과를 저장할 작업 테이블을 만들어야 합니다. 이 작업 테이블에 8,060바이트의 제한을 초과하는 행을 만들어야 하는 경우 쿼리에서 오류가 반환됩니다.
예를 들어 다음 테이블 집합을 살펴 보십시오.
USE tempdb;
GO
CREATE TABLE t1
(ch char(6000), vch1 varchar(100), vch2 varchar(100), vch3 varchar(100));
CREATE TABLE t2(i int);
GO
INSERT t1 VALUES(REPLICATE('abc', 2000),
'123456789012345678901234567890', '123456789012345678901234567890',
'123456789012345678901234567890');
INSERT t2 VALUES(7);
INSERT t2 VALUES(13);
GO
이제 다음 쿼리를 살펴 보십시오. SQL Server 2000에서는 이 쿼리가 실행되지만 SQL Server 2005에서는 오류가 반환됩니다.
SELECT ch+ch, vch1, vch2, vch3
FROM t1, t2
ORDER BY vch1, i;
GO
SQL Server 2005에서는 데이터베이스 엔진이 SQL Server 2000에서 ORDER BY
절을 평가하는 것보다 일찍 이 절을 평가하며 쿼리 결과 집합에 매우 긴 char 필드가 요청되기 때문에 이 쿼리는 실패합니다. 데이터베이스 엔진에서 작성하는 작업 테이블이 8,060바이트의 제한을 초과하는 행을 하나 이상 지정합니다.
성공적으로 쿼리를 실행하려면 CAST 또는 CONVERT를 사용하여 SELECT 목록에 있는 긴 필드를 모두 varchar(max) 또는 nvarchar(max) 데이터 형식으로 변환합니다. 예를 들어 다음 쿼리는 SQL Server 2005에서 성공적으로 실행됩니다.
SELECT CONVERT(varchar(max),ch+ch), vch1, vch2, vch3
FROM t1, t2
ORDER BY vch1, i;
GO
참고 항목
관련 자료
쿼리 문제 해결
CAST 및 CONVERT(Transact-SQL)