2017-04-01 1 views
0

CTE의 일부로 행을 선택하는 테이블 반환 함수가 있고 CTE에서 행이 선택되지 않은 경우 반환 된 테이블에 다른 선택/삽입을 수행하려고합니다.IF NOT EXISTS WITH WITH CTE 사용

WITH myCte AS (SELECT * FROM abc WHERE xyz = 123) 

IF NOT EXISTS (SELECT * FROM myCte) 
BEGIN 
    ... 
END 

NOT EXISTS 조건에서 CTE 테이블을 사용할 때마다 구문 오류가 발생합니다. myCte는 예제보다 훨씬 복잡하므로 전체 쿼리를 조건에 배치하는 것이 어려울 것입니다.

상태 검사에서 CTE 결과를 어떻게 사용할 수 있습니까?

+1

이미에 대답 http://stackoverflow.com/questions/39576785/using-if-exists-with-a-cte – walshy002000

+0

관련되지 않음 - 나는 복잡한 쿼리는이 논리를 이동하는 좋은 징조라고 생각합니다 응용 프로그램 코드. 데이터를 읽고 쓰는 데이터베이스 책임은 그것을 처리하지 않습니다. – Fabio

답변

0

common table expression을 사용할 컨텍스트에서 선언해야하며 with 다음의 문에만 사용할 수 있습니다. 결과를 여러 번 사용하려는 경우 공통 테이블 표현식을 여러 번 반복하거나 테이블 변수 또는 임시 테이블을 사용하여 결과를 대신 보유 할 수 있습니다.

WITH myCte AS (SELECT * FROM abc WHERE xyz = 123) 

select * 
into #myTempTable 
from myCte 

IF NOT EXISTS (SELECT * FROM #myTempTable) 
BEGIN 
    ... 
END