2010-05-05 3 views
1

열의 계층 구조 표현을 만들었습니다. 그러나 오류가 발생CTE 작업 방법. 앵커와 관련된 오류가 있습니다.

세부 메시지 240, 수준 16, 상태 1, 줄 1

있는 앵커 및 재귀 쿼리의 열 "DISPLAY"의 재귀 부분 사이에 일치하지 않는 유형 "CTE".

일부 타이핑 오류가 있음을 알고 있습니다. 그러나 나는 오류를 제거하는 방법을 모른다. 제발 그냥 내 오류를 정렬하지 말아주세요. 이 오류가 왜 발생하는지 설명이 필요합니다. 이 오류가 발생했을 때.

내가 소개하는 정렬 col에 근거하여 테이블을 정렬하려고합니다. 모든 레벨에서 '-'를 추가하고 이에 따라 정렬하고 싶습니다.

WITH CTE (PK_CATEGORY_ID, [DESCRIPTION], FK_CATEGORY_ID, DISPLAY, SORT, DEPTH) 
     AS 
     (
      SELECT PK_CATEGORY_ID, [DESCRIPTION], FK_CATEGORY_ID, '-' AS DISPLAY, '--' AS SORT, 0 AS DEPTH 
      FROM dbo.L_CATEGORY_TYPE WHERE FK_CATEGORY_ID IS NULL 

      UNION ALL 

      SELECT T.PK_CATEGORY_ID, T.[DESCRIPTION], T.FK_CATEGORY_ID, CAST(DISPLAY+T.[DESCRIPTION] AS VARCHAR(1000)), '--' AS SORT, C.DEPTH +1 
      FROM dbo.L_CATEGORY_TYPE T JOIN CTE C ON C.PK_CATEGORY_ID = T.FK_CATEGORY_ID 

      --SELECT T.PK_CATEGORY_ID, C.SORT+T.[DESCRIPTION], T.FK_CATEGORY_ID 
      --, CAST('--' + C.SORT AS VARCHAR(1000)) AS SORT, CAST(DEPTH +1 AS INT) AS DEPTH 
      --FROM dbo.L_CATEGORY_TYPE T JOIN CTE C ON C.FK_CATEGORY_ID = T.PK_CATEGORY_ID 
     ) 
     SELECT PK_CATEGORY_ID, [DESCRIPTION], FK_CATEGORY_ID, DISPLAY, SORT, DEPTH 
     FROM CTE    
     ORDER BY SORT 

답변

2

문자열 상수 데이터 타입 CHAR, SQL Server에서하지 VARCHAR을 도와주세요.

WITH CTE (PK_CATEGORY_ID, [DESCRIPTION], FK_CATEGORY_ID, DISPLAY, SORT, DEPTH) 
     AS 
     (
      SELECT PK_CATEGORY_ID, [DESCRIPTION], FK_CATEGORY_ID, CAST('-' AS VARCHAR(1000)) AS DISPLAY, '--' AS SORT, 0 AS DEPTH 
      FROM dbo.L_CATEGORY_TYPE WHERE FK_CATEGORY_ID IS NULL 

      UNION ALL 

      SELECT T.PK_CATEGORY_ID, T.[DESCRIPTION], T.FK_CATEGORY_ID, CAST(DISPLAY+T.[DESCRIPTION] AS VARCHAR(1000)), '--' AS SORT, C.DEPTH +1 
      FROM dbo.L_CATEGORY_TYPE T JOIN CTE C ON C.PK_CATEGORY_ID = T.FK_CATEGORY_ID 

      --SELECT T.PK_CATEGORY_ID, C.SORT+T.[DESCRIPTION], T.FK_CATEGORY_ID 
      --, CAST('--' + C.SORT AS VARCHAR(1000)) AS SORT, CAST(DEPTH +1 AS INT) AS DEPTH 
      --FROM dbo.L_CATEGORY_TYPE T JOIN CTE C ON C.FK_CATEGORY_ID = T.PK_CATEGORY_ID 
     ) 
     SELECT PK_CATEGORY_ID, [DESCRIPTION], FK_CATEGORY_ID, DISPLAY, SORT, DEPTH 
     FROM CTE    
     ORDER BY SORT 
:

당신은 명시 적 캐스트를 사용할 필요가