Du kan ikke gøre det, fordi SQL er kompileret, før det ved, hvad værdien af @a er (jeg går ud fra, at du i virkeligheden ønsker, at @a skal være en parameter og ikke hårdkodet som i dit eksempel).
I stedet kan du gøre dette:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Men vær forsigtig, dette er en sikkerhedssårbarhed (sql-injection-angreb), så det bør ikke gøres, hvis du ikke kan stole på eller godt rense @a.