Nemůžete to udělat, protože SQL je zkompilováno dříve, než ví, jaká je hodnota @a (předpokládám, že ve skutečnosti byste chtěli, aby @a byl nějaký parametr a ne pevně zakódovaný jako ve vašem příkladu).
Místo toho můžete udělat toto:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Ale buďte opatrní, jedná se o bezpečnostní zranitelnost (útoky sql-injection), takže byste to neměli dělat, pokud nemůžete @a důvěřovat nebo je dobře vyčistit.