Sie können es nicht tun, weil SQL kompiliert wird, bevor es weiß, was der Wert von @a ist (ich gehe davon aus, dass Sie in Wirklichkeit wollen, dass @a ein Parameter ist und nicht wie in Ihrem Beispiel fest codiert).
Stattdessen können Sie Folgendes tun:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Aber seien Sie vorsichtig, dies ist eine Sicherheitslücke (SQL-Injection-Angriffe), also sollten Sie es nicht tun, wenn Sie @a nicht vertrauen oder es nicht gut reinigen können.