Está faltando um espaço entre
PivotData
e PIVOT
. SET @query = @query +
' PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p'
// ^--- HERE
Como resultado, o analisador SQL interpreta
PivotDataPIVOT
como um único identificador, resultando em um erro de sintaxe mais tarde.