Te falta un espacio entre PivotData
y PIVOT
.
SET @query = @query +
' PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p'
// ^--- HERE
Como resultado, el analizador SQL interpreta PivotDataPIVOT
como un único identificador, lo que resulta en un error de sintaxis más adelante.