Липсва ви интервал между PivotData и PIVOT .
SET @query = @query +
' PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p'
// ^--- HERE
В резултат на това SQL анализаторът интерпретира PivotDataPIVOT като единичен идентификатор, което води до синтактична грешка по-късно.