Du kan inte göra det eftersom SQL kompileras innan den vet vad värdet av @a är (jag antar att du i verkligheten skulle vilja att @a ska vara någon parameter och inte hårdkodad som i ditt exempel).
Istället kan du göra så här:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Men var försiktig, detta är en säkerhetsrisk (sql-injection attacker) så bör inte göras om du inte kan lita på eller väl rensa @a.