CTE를 사용하여 유효한 SQL을 작성하는 오랜 기간의 쿼리 시스템을 작성 중입니다. 간단한 시스템 내에서도 수천 가지의 표현을 만들 수있는 가능성이 있습니다. 그리고 나는 앞으로 한도에 도달 할 수 있고 시스템을 재 작업해야한다고 걱정합니다.허용되는 CTE (Common Table Expression) 식의 수에는 제한이 있습니까?
나는 높거나 낮게 조사했지만 대답을 찾을 수 없습니다. 내가 알고 싶은 것은 다음과 같습니다 :
CTE에서 허용되는 최대 표현식은 얼마입니까?
참고 : 나는 재귀를 사용하여 이 아니며입니다.
내 추측이 나는 배치 당 허용되는 문자의 수에 의해 제한하고있어한다
테스트 코드 아래
EDIT (Maximum size for a SQL Server Query? IN clause? Is there a Better Approach 참조). 내 개발 기계가 이상하게 600에 정확하게 멈췄다.
DECLARE @i int = 1, @q varchar(max);
SET @q = 'WITH[0]AS(SELECT 1 AS c)'
WHILE @i < 600
BEGIN
SET @q = @q + ',[' + CONVERT(varchar, @i) + ']AS(SELECT * FROM[' + CONVERT(varchar, @i-1) + '])';
SET @i = @i + 1;
END;
SET @q = @q + 'SELECT * FROM[' + CONVERT(varchar, @i-1) + ']';
EXEC (@q);
프로덕션 서버에서이 문제를 테스트하는 방법에 대해 살펴 보겠습니다.
내 dev 컴퓨터에서 1,000 개의 매우 간단한 CTE를 사용해 보았는데'이 쿼리를 실행하기 위해 리소스 풀 'default'에 시스템 메모리가 충분하지 않습니다 .' 왜 끝까지 테스트하지 않으시겠습니까? 테스트 한 쿼리는'; T0 (C) AS (SELECT 1), T1 (C) AS (SELECT * FROM T0), T2 (C) AS (SELECT * FROM T1),/* ... */T1000 (C) AS (SELECT * FROM T999) SELECT * FROM T1000' –
제 질문은 열심히 프로그램 된 한도를 묻습니다. 내 dev 환경이 얼마나 멀리 갈 수 있는지 테스트하고 싶다면 그렇게했을 것입니다. 생산 하드웨어를 제어 할 수 없으므로 설정 한 한계를 알아야합니다. – Codesleuth
글쎄, 특히 스펙이 확실하지 않은 환경에서 비슷한 스펙으로 테스트하고 메모리 오류 또는 '내부 오류 : 표현식 서비스 한계에 도달했습니다. 귀하의 질의에 잠재적으로 복잡한 표현이 있는지 살펴보고 단순화하려고하십시오. 그러면 모든 아이디어가 완전한 비 시동기라는 것을 분명히 알 수 있습니다. –