日期:2014-05-17  浏览次数:20481 次

字段与参数的简单问题
SQL code
select jan_2012 from test99

declare @name varchar(20)
set @name='jan_2012'
begin 
select @name from test99
end



jan_2012
---------------------
12345.00
12345.00
12345.00
12345.00
12345.00
12345.00

(6 row(s) affected)


--------------------
jan_2012
jan_2012
jan_2012
jan_2012
jan_2012
jan_2012

(6 row(s) affected)

为什么两个结果不一样的

------解决方案--------------------
exec('select '+ @name +' from test99')

------解决方案--------------------
select jan_2012 from test99

declare @name varchar(20)
set @name='jan_2012'
begin 
exec('select '+@name+' from test99')
end
------解决方案--------------------
第一个是字段值,
第二个是变量值.
------解决方案--------------------
select jan_2012 from test99

declare @name varchar(20)
set @name='jan_2012/10'
begin 
EXEC('select '+@name+' from test99')
end

select jan_2012 from test99

declare @name varchar(20)
set @name='jan_2012'
begin 
EXEC('select '+@name+'/10 from test99')
end




------解决方案--------------------
参数是数据
字段名是数据库中的一个对象
字段 jan_2012 并不等价于 字符串'jan_2012'
数据库中的对象不能参数化 除非你用 exec动态构建执行语句
------解决方案--------------------
探讨
如果要除以10,怎么写呢!定义时写还是exec里写呢