Você precisa de parênteses
exec (@sql)
O SQL Server procurará um procedimento armazenado do nome no
@sql
variável sem isso e reclamar Could not find stored procedure 'select x, y from z'.
Se você estiver usando SQL dinâmico Veja A maldição e bênçãos do SQL dinâmico para um bom artigo sobre o tema.