2010-10-15 27 views
0

J'ai le code suivant dans une requête T-SQL, j'obtiens le message d'erreur suivant et je ne suis pas vraiment sûr de ce qui cause l'erreur. J'écris la déclaration de Pivot pour être dynamique b/c Je ne connais pas les colonnes qui seront retournées. Message d'erreur: Msg 8156, niveau 16, état 1, ligne 9 T-SQL - Erreur de tableau croisé dynamique

La température Tableau #FeeTotals a 3 colonnes 1) dwordrkey (clé d'identification unique), 2) Desc_Cd: description de la charge, 3) Total: une colonne d'argent

DECLARE @PivotColumnHeaders VARCHAR(MAX) 
    SELECT @PivotColumnHeaders = 
     COALESCE(
     @PivotColumnHeaders + ',[' + cast(Desc_Cd as varchar) + ']', 
     '[' + cast(Desc_cd as varchar)+ ']' 
    ) 
    From #FeeTotals 

    DECLARE @PivotTableSQL NVARCHAR(MAX) 

    SET @PivotTableSQL = N' 
    Select * 
    From #FeeTotals 
    PIVOT 
     (
    Sum(Total) 
    For Desc_Cd In (' + @PivotColumnHeaders + ') 
) 
    As PivotTable' 

    Execute(@PivotTableSQL) 
+2

Pour le débogage, pouvez-vous remplacer l'EXECUTE avec PRINT. Ensuite, vous pouvez consulter la déclaration réelle qui échoue. – bobs

Répondre

3

Vous devez sélectionner DISTINCT valeurs de Desc_Cd From #FeeTotals lors de la création des en-têtes. Ça doit être là deux fois. Utilisez également la fonction QuoteName afin que votre code traite les valeurs Desc_Cd qui contiennent le caractère ] correctement.

DECLARE @PivotColumnHeaders NVARCHAR(MAX) 

SELECT @PivotColumnHeaders = 
COALESCE(@PivotColumnHeaders + ',' + Desc_Cd, Desc_Cd) 
    FROM(
    SELECT DISTINCT QUOTENAME(Desc_Cd) AS Desc_Cd 
    FROM #FeeTotals 
    ) F