Anda tidak dapat melakukannya karena SQL dikompilasi sebelum mengetahui nilai @a (saya berasumsi pada kenyataannya Anda ingin @a menjadi beberapa parameter dan bukan kode keras seperti pada contoh Anda).
Sebagai gantinya, Anda dapat melakukan ini:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Tapi hati-hati, ini adalah kerentanan keamanan (serangan injeksi sql) jadi tidak boleh dilakukan jika Anda tidak dapat mempercayai atau membersihkan @a.