我想知道为什么我不能像这样使用变量列名:
declare @a as varchar;
set @a='TEST'
select @a from x;
Run Code Online (Sandbox Code Playgroud)
谢谢
Dan*_*haw 15
你无法做到这一点,因为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
Run Code Online (Sandbox Code Playgroud)
但是要小心,这是一个安全漏洞(sql-injection攻击),所以如果你不能信任或者干净@a,就不应该这样做.
因为这是不允许的。
您可以使用动态 sql 查询:
declare @a as varchar;
set @a='TEST'
exec ('select ' + @a + ' from x')
Run Code Online (Sandbox Code Playgroud)