Nie możesz tego zrobić, ponieważ SQL jest kompilowany, zanim pozna wartość @a (zakładam, że w rzeczywistości chcesz, aby @a było jakimś parametrem, a nie zakodowanym na sztywno, jak w twoim przykładzie).
Zamiast tego możesz to zrobić:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Ale bądź ostrożny, jest to luka w zabezpieczeniach (ataki wstrzykiwania sql), więc nie należy tego robić, jeśli nie możesz zaufać lub dobrze wyczyścić @a.