ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ibatis 환경에서 SQLServer의 CTE 쿼리 동작할까?
    ♣ Tech & Biz Salon/Tech 2012. 7. 20. 08:05

    SQLServer 관련 국내 커뮤니티에서 도움을 받음.

    잘된다고 하니 Closer Table 구조 아니라 심플하게 갈 수 있어서 Good 이다.

    물론 개발 프레임웍 세팅후 테스트는 할 예정~


    ● My question

    구글링 해보았으나 잘못찾겠네요.


    계층구조가 있어서

    2008 R2 의 hierachyID 관련 검토를 해보았으나

    동일 레벨에서 원하는대로 Sort 를 적절히 할 방법이 없어 보이더군요.


    그래서 방안을

    1) CTE 쿼리 사용

    2) CLOSER TABLE 사용 ( 조상과 자손 관계를 다 기록하는 별도 테이블을 둔다 )

    로 생각하고 있는데...


    IBATIS 단에서 CTE 쿼리 SQLMAP에 넣어서 호출하면 DB에서 정상적으로 값을 가져올지 확신이 안섭니다.

    혹시 아시는 분은 답 주시면 감사하겠습니다.


    ( 아직 개발 프레임웍 부분을 세팅하지 않은 상황입니다

      환경은 JAVA ( SPRING - IBATIS ) - SQLSERVER 2008 R2 구성입니다. )


    답이 없으면... 나중에 개발환경 세팅하고 나서 직접 테스트해봐야 알 수 있을거 같네요...




    ● 답 덧글

    정상적으로 잘 동작합니다.

    다만 CTE 자체에 대한 제약에 대해 이해를 하시고 몇 가지 주의사항은 지켜 주셔야 합니다.

     

    특히 앞 구문과 ";" 등으로 단락 구분은 확실히 해 주셔야 합니다.

    의외로 실수를 많이 하시는 부분입니다.

     

    공통 테이블 식 만들기 및 사용 지침

    다음 지침은 비재귀 공통 테이블 식에 적용됩니다. 재귀 공통 테이블 식에 적용되는 지침은 다음에 나오는 "재귀 공통 테이블 식 정의 및 사용 지침"을 참조하십시오.

    • CTE 뒤에는 일부 또는 모든 CTE 열을 참조하는 SELECT, INSERT, UPDATE, MERGE 또는 DELETE 문 하나가 있어야 합니다. 뷰의 SELECT 문 정의의 일부로 CREATE VIEW 문 내에 CTE를 지정할 수 있습니다.

    • 비재귀 CTE 내에 여러 개의 CTE 쿼리 정의를 정의할 수 있습니다. UNION ALL, UNION, INTERSECT 또는 EXCEPT 집합 연산자 중 하나를 사용해 이 같은 정의를 결합해야 합니다.

    • CTE는 같은 WITH 절에서 자신 및 이전에 정의한 CTE를 참조할 수 있지만 전방 참조는 허용되지 않습니다.

    • CTE에 둘 이상의 WITH 절을 지정할 수 없습니다. 예를 들어 CTE_query_definition이 하위 쿼리를 포함하는 경우 그 하위 쿼리가 또 다른 CTE를 정의하는 중첩 WITH 절을 포함할 수 없습니다.

    • CTE_query_definition에는 다음 절을 사용할 수 없습니다.

      • COMPUTE 또는 COMPUTE BY

      • ORDER BY(TOP 절을 지정하는 경우는 제외)

      • INTO

      • 쿼리 힌트가 있는 OPTION 절

      • FOR XML

      • FOR BROWSE

    • 일괄 처리에 속한 문에 CTE를 사용할 때는 그 전의 문 다음에 반드시 세미콜론을 추가해야 합니다.

    • CTE를 참조하는 쿼리를 사용하여 커서를 정의할 수 있습니다.

    • CTE에서 원격 서버 상의 테이블을 참조할 수 있습니다.

    • CTE를 실행할 때는 쿼리의 뷰를 참조하는 힌트와 마찬가지로 CTE를 참조하는 힌트가 CTE가 기본 테이블에 액세스할 때 발견되는 다른 힌트와 충돌을 일으킬 수 있습니다. 이러한 경우 쿼리에서 오류를 반환합니다. 자세한 내용은 뷰 확인을 참조하십시오.

    • UPDATE 문의 대상이 CTE인 경우 문에서 CTE에 대한 모든 참조가 일치해야 합니다. 예를 들어 FROM 절에서 CTE에 별칭이 지정된 경우 CTE에 대한 다른 모든 참조에서 이 별칭을 사용해야 합니다. CTE 참조가 모호하면 예기치 않은 조인 동작과 의도하지 않은 쿼리 결과가 발생할 수 있습니다. 자세한 내용은 UPDATE(Transact-SQL)를 참조하십시오.

     

     

    자세한 사항은 아래 MSDN을 확인해 주세요.

     

    http://msdn.microsoft.com/ko-kr/library/ms175972(v=sql.105).aspx

    http://msdn.microsoft.com/ko-kr/library/ms190766(v=sql.105).aspx

     

Designed by Tistory.