Tente isso no final:
exec (@query)
Se você não tiver os colchetes, o SQL Server assumirá que o valor da variável é um nome de procedimento armazenado.
OU
EXECUTE sp_executesql @query
E não deve ser por causa do FULL JOIN.
Mas espero que você já tenha criado as tabelas temporárias:#TrafficFinal, #TrafficFinal2, #TrafficFinal3 antes disso.
Observe que há considerações de desempenho entre o uso de EXEC e sp_executesql. Porque sp_executesql usa o cache de instrução forçado como um sp.
Mais detalhes aqui .
Em outra nota, existe uma razão pela qual você está usando sql dinâmico para este caso, quando você pode usar a consulta como está, considerando que você não está fazendo nenhuma manipulação de consulta e executando-a do jeito que está?