SQL Server变量列名?

时间:2010-04-28 06:59:07

标签: sql-server tsql

我想知道为什么我不能像这样使用变量列名:

declare @a as varchar;
set @a='TEST'

select @a from x;

谢谢

4 个答案:

答案 0 :(得分:15)

你不能这样做,因为SQL在它知道@a的值之前是编译的(我假设你实际上你希望@a是一些参数而不像你的例子那样硬编码)。 / p>

相反,你可以这样做:

declare @a as varchar; 
set @a='TEST' 

declare @sql nvarchar(max)
set @sql = 'select [' + replace(@a, '''', '''''') + '] from x'

exec sp_executesql @sql

但要小心,这是一个安全漏洞(sql-injection攻击),所以如果你不能信任或干净@a,就不应该这样做。

答案 1 :(得分:4)

因为它是不允许的。而不是这个你可以使用动态SQL查询:

declare @a as varchar;
set @a='TEST'
exec ('select ' + @a + ' from x')

答案 2 :(得分:3)

将<{1}}用于此

sp_executesql

答案 3 :(得分:2)

因为列名在编译时解析而不是在SQL语句的运行时解析。