Bạn không thể làm điều đó vì SQL được biên dịch trước khi nó biết giá trị của @a là gì (tôi giả sử trong thực tế, bạn muốn @a là một số tham số chứ không phải được mã hóa cứng như trong ví dụ của bạn).
Thay vào đó, bạn có thể làm điều này:
declare @a as varchar;
set @a='TEST'
declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'
exec sp_executesql @sql
Nhưng hãy cẩn thận, đây là một lỗ hổng bảo mật (các cuộc tấn công sql-injection), vì vậy bạn không nên thực hiện nếu bạn không thể tin tưởng hoặc dọn dẹp tốt @a.