PRB: 실행 계획 및 집계 연결 쿼리 결과에 따라 식 위치

기술 자료 번역 기술 자료 번역
기술 자료: 287515 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

연산자 또는 식을 집계 연결 쿼리의 ORDER BY 절을 적용 예기치 않은 결과가 발생할 수 있습니다. Microsoft SQL Server의 집계 연결 쿼리 결과를 Transact-SQL 식을 쿼리에 ORDER BY 절에 열에 적용되는 여부에 따라 달라집니다. 자세한 내용은 이나 나타나는 동작과 집계 연결 쿼리 예제를 보려면 이 문서의 "추가 정보" 절을 참조하십시오.

원인

집계 연결 쿼리에 대한 올바른 동작이 정의되지 않습니다.

쿼리의 SHOWPLAN 출력의 시험 SQL Server 쿼리 프로세서는 식이 적용될 때 쿼리의 ORDER BY 절에 열을 것보다 쿼리의 SELECT 목록에서 열을 이러한 동일한 식을 적용하면 다른 실행 계획을 작성합니다 나타납니다. 쿼리 프로세서는 의한 결정은 기준으로 가능한 실행 계획 비용은 합니다.

ANSI SQL-92 사양을 ORDER BY 절을 참조하는 열을 SELECT 목록에 있는 열을 정의한 결과 집합에 일치해야 합니다. 식을 ORDER BY 절 구성원으로 적용될 때 정의되지 않은 동작이 결과로 SELECT 목록의 결과 열에 노출되지 않습니다.

또한, ORDER BY 절을 적용할 방법은 관련된 ANSI 사양을 해당 ORDER BY 효과를 같아야 합니다, SELECT 목록에 의해 생성되는 전체 결과 집합을 가져와 SELECT 목록에 해당 열을 기준으로 테이블의 순서는 다음 수행할 것처럼 상태.

해결 과정

집계 연결 쿼리의 예상된 결과를 얻기 위해 ORDER BY 절을 아닌 SELECT 목록의 열이 Transact-SQL 함수나 식이 적용됩니다.

추가 정보

집계 연결 쿼리를 여러 행 값의 한 행으로 결합하는 쿼리입니다.

문제를 재현하는 방법

문제를 재현하려면 다음 Transact-SQL 스크립트를 사용하십시오.

SELECT 목록의 대 ORDER BY 절이 있는 [C1] 열의 LTRIM 및 RTRIM 함수 사용하여 응용 프로그램을 유의하십시오.
IF EXISTS( SELECT * FROM sysobjects WHERE name = 'T1' )
	DROP TABLE T1
GO

CREATE TABLE T1(  C1  NCHAR(1)  )

SET NOCOUNT ON

INSERT T1 VALUES( 'A' )
INSERT T1 VALUES( 'B' )

DECLARE @Str0 VARCHAR(4) 
DECLARE @Str1 VARCHAR(4) 
DECLARE @Str2 VARCHAR(4) 

SET @Str0 = ''
SET @Str1 = ''
SET @Str2 = ''

SELECT @Str0 = @Str0 + C1 FROM T1 ORDER BY C1
SELECT @Str1 = @Str1 + C1 FROM T1 ORDER BY LTRIM( RTRIM( C1 ) )
SELECT @Str2 = @Str2 + LTRIM( RTRIM( C1 ) ) FROM T1 ORDER BY C1

SELECT @Str0 'No functions applied to column.'
SELECT @Str1 'LTRIM() and RTRIM() applied to ORDER BY clause.'
SELECT @Str2 'SELECT list with LTRIM(RTRIM()) (Workaround)'

IF @Str1 <> @Str2
BEGIN
   PRINT ''
   PRINT 'Execution plan depends on where the functions are applied:'
   PRINT '=========================================================='
   PRINT ''

   SET @Str1 = ''
   SET @Str2 = ''

   SET STATISTICS PROFILE ON
   SELECT @Str1 = @Str1 + C1 FROM T1 ORDER BY LTRIM( RTRIM( C1 ) )
   SELECT @Str2 = @Str2 + LTRIM( RTRIM( C1 ) ) FROM T1 ORDER BY C1
   SET STATISTICS PROFILE OFF
END

SET NOCOUNT OFF

DROP TABLE T1
				

속성

기술 자료: 287515 - 마지막 검토: 2003년 10월 16일 목요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
키워드:?
kbmt kbcodesnippet kbprb KB287515 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com