आप ऐसा नहीं कर सकते क्योंकि SQL को संकलित किया जाता है इससे पहले कि यह जानता है कि @a का मान क्या है (मैं वास्तव में मान रहा हूं कि आप चाहते हैं कि @a कुछ पैरामीटर हो और आपके उदाहरण में हार्ड कोड न हो)।
इसके बजाय आप यह कर सकते हैं:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
लेकिन सावधान रहें, यह एक सुरक्षा भेद्यता (एसक्यूएल-इंजेक्शन हमले) है, इसलिए ऐसा नहीं किया जाना चाहिए यदि आप @a पर भरोसा या अच्छी तरह से साफ नहीं कर सकते हैं।