2012-03-16 1 views
2

오늘 T-SQL, SQL-Server-2008에서 일부 쿼리를 수행하고 있었는데 이해할 수없는 이상한 것을 발견했습니다. 선택의 한, 그러나여러 개의 공통 테이블 식 (WITH)에서 여러 번 쿼리 할 수 ​​없습니까?

;WITH temp1 AS (SELECT * FROM dbo.Log) 
, temp2 AS (SELECT * FROM dbo.SignalCodeItems300_tbl) 

SELECT * FROM temp1 
SELECT * FROM temp2 

: 내가 지금과 같은 두 가지 공통 테이블 표현식에서 조회 할 노력하고, 쿼리 창을 사용하여 (내가하고 있던 더 확실한 것을 만드는 많은 코드를 제거) 명령문이 실행됩니다. 에 관계없이 어떤, 첫 번째 만 실행합니다. 이게 내가 누락 된 구문 일이라고 생각 하나? "잘못된 개체 이름 'temp2'"오류가 나타납니다.

누군가이 문제에 대해 밝힐 수 있습니까? 이 문제를 해결할 수있는 방법이 있습니까?

답변

1

아니요, 제대로 작동합니다. CTE (Common Table Expression)는 정의 이후 첫 번째 명령문에서만 사용할 수 있습니다. 즉, select * from temp1 이후에는 둘 다 사용할 수 없게됩니다.

수정이 될 것입니다 :

;WITH temp1 AS (SELECT * FROM dbo.Log) 
SELECT * FROM temp1 

;WITH temp2 AS (SELECT * FROM dbo.SignalCodeItems300_tbl) 
SELECT * FROM temp2 
1

당신은 MSDN documentation를 살펴 할 수 있습니다.

특히 :

Multiple CTE query definitions can be defined in a nonrecursive CTE. 
The definitions must be combined by one of these set operators: 
UNION ALL, UNION, INTERSECT, or EXCEPT. 

이 본질적으로 하나 개의 쿼리로 실행과 같이, 일치하는 두 개의 서로 다른 스키마하지만 혼합 수 없습니다.

0

명시 적으로 반복하지 않으려는 경우보기 또는 사용자 정의 된 테이블 반환 함수를 사용하여 쿼리를 저장할 수 있습니다.