Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

증상

Microsoft SQL Server 2008를 실행 하는 컴퓨터에서 다음 시나리오를 고려 합니다.

시나리오 1

WITH 문을 사용 하 여 CTE (공통 테이블 식)를 지정 합니다. 예를 들어 다음 쿼리를 실행 합니다.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

그런 다음이 쿼리를 실행 합니다.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

이 시나리오에서는이 쿼리에 대해 캐시 된 쿼리 계획이 잘못 된 statement_start_offset 및 statement_end_offset 값을 저장 합니다. 특히, sys.dm_exec_query_stats DMV (동적 관리 뷰)를 실행할 때 statement_end_offset 값이 statement_start_offset 값 보다 작습니다. 이 문제 때문에 보고서에서 statement_start_offset 값이 항상 statement_stop_offset 값 보다 작은 것으로 가정 하면 성능 보고서가 실패할 수 있습니다.

시나리오 2

WITH 문을 사용 하 여 공통 테이블 식을 지정 하 고 RECOMPILE 옵션을 사용 합니다. 예를 들어 다음 스크립트를 사용 하 여 SQL Server 2008에서 함수를 만듭니다.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

"Function1 ()" 쿼리를 실행 하면 다음과 같은 오류 메시지가 나타납니다.

현재 명령에 심각한 오류가 발생 했습니다. 결과가 있으면 삭제 해야 합니다.

또한이 오류는 SQL server에 서버 트래픽이 많은 경우 다시 컴파일 옵션을 사용 하지 않고 발생할 수 있습니다.

시나리오 3

WITH 문을 사용 하 여 공통 테이블 식을 지정 합니다. WITH 문에서 존재 하지 않는 테이블을 지정 합니다. 예를 들어 다음 쿼리를 실행 합니다.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

이 쿼리를 실행 하면 누락 된 테이블에 대 한 오류가 표시 되지 않습니다.

원인

이러한 문제는 WITH 문 다음에 오는 SELECT 문이 제대로 처리 되지 않기 때문에 발생 합니다. WITH 문은 다음 구문을 사용 합니다.

WITH common_table_expression AS(CTE_query_definition)

그런 다음이 문은 지정 된 공통 테이블 식 이름에 할당 된 결과 집합을 만듭니다. 그런 다음 SELECT 문으로이 명령문을 팔 로우 합니다. 이 두 번째 문이 괄호로 묶여 있고, 결과에 대 한 작업을 수행 하거나, 동적 관리 보기 sys.dm_exec_query_stats를 실행 하려고 하면 잘못 된 결과가 나타나거나 오류가 발생 합니다.

해결 방법

서비스 팩 정보 이 문제를 해결 하려면 SQL Server 2008의 최신 서비스 팩을 구하십시오. 자세한 내용을 확인하려면 다음 문서 번호를 클릭하여 Microsoft 기술 자료 문서를 참조하십시오.

968382 SQL Server 2008의 최신 서비스 팩을 구하는 방법

해결 방법

이러한 문제를 해결 하려면 공용 테이블 식을 따르는 문에서 괄호를 제거 해야 합니다. 예를 들어 이러한 괄호를 사용 하는 다음과 같은 문을 고려해 보겠습니다.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

이러한 문제를 해결 하려면 괄호를 사용 하지 않는 다음과 같은 문으로 변경 합니다.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

상태

Microsoft는 "적용 대상" 섹션에 나열 된 Microsoft 제품의 문제를 확인 했습니다. 이 문제는 SQL Server 2008 서비스 팩 2 (SP2)에서 처음 수정 되었습니다.

추가 정보

공통 테이블 식과 함께 WITH 문을 사용 하는 방법에 대 한 자세한 내용은 다음 MSDN 웹 페이지를 참조 하세요.

T-sql (common_table_expression)Sys.dm_exec_query_stats에 대 한 자세한 내용을 보려면 다음 MSDN 웹 페이지를 방문 하세요.

t-sql (sys.dm_exec_query_stats)

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?
제출을 누르면 피드백이 Microsoft 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×