2010-05-05 4 views
1

Je crée une représentation hiérarchique d'une colonne. Mais une erreur se produitComment travailler avec CTE. Il y a une erreur liée à l'ancre

Détails sont

Msg 240, Niveau 16, État 1, Ligne 1 types ne correspondent pas entre l'ancre et la partie récursive dans la colonne « DISPLAY » de la requête récursive "CTE".

Je sais qu'il y a une erreur de typage. Mais je ne sais pas comment supprimer l'erreur. S'il vous plaît, ne faites pas que trier mon erreur. J'ai besoin d'explication pourquoi cette erreur arrive. Lorsque cette erreur se produit. J'essaye de trier la table sur la base du type col que je m l'introduction. Je veux ajouter '-' à tous les niveaux et je veux trier en conséquence.

S'il vous plaît aider

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 

Répondre

2

constantes de chaîne ont CHAR type de données, pas VARCHAR dans SQL Server.

Vous devez utiliser transtypage explicite:

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