Je kunt het niet doen omdat SQL is gecompileerd voordat het weet wat de waarde van @a is (ik neem aan dat je in werkelijkheid zou willen dat @a een parameter is en niet hard gecodeerd zoals in jouw voorbeeld).
In plaats daarvan kun je dit doen:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Maar wees voorzichtig, dit is een beveiligingsprobleem (sql-injection-aanvallen) en zou dus niet moeten worden gedaan als u @a niet kunt vertrouwen of niet goed kunt opschonen.