日期:2014-05-18  浏览次数:20505 次

学习存储过程中遇到的一个小问题,请教各位前辈
一下是其中的一段
set   @sql   = 'update   temp3   set   fee '+rtrim(@i)+ '=   c.month_price   , '+   'sumfee '+rtrim(@i)+ '=   c.sum_price     '+     '   from   #temp1   c,temp3   d   where   c.corp_name=d.corp_name   and   c.charge_name   =   '+@fee
                  print   @sql
                  exec(@sql)
执行后报错:
update   temp3   set   fee1=   c.month_price   ,sumfee1=   c.sum_price       from   #temp1   c,temp3   d   where   c.corp_name=d.corp_name   and   c.charge_name   =   罚没收入
服务器:   消息   207,级别   16,状态   3,行   1
列名   '罚没收入 '   无效。
应当如何修改?

------解决方案--------------------
set @sql = 'update temp3 set fee '+rtrim(@i)+ '= c.month_price , '+ 'sumfee '+rtrim(@i)+ '= c.sum_price '+ ' from #temp1 c,temp3 d where c.corp_name=d.corp_name and c.charge_name = ' ' '+@fee+ ' ' ' '
print @sql
exec(@sql)

------解决方案--------------------
set @sql = 'update temp3 set fee '+rtrim(@i)+ '= c.month_price , '+ 'sumfee '+rtrim(@i)+ '= c.sum_price '+ ' from #temp1 c,temp3 d where c.corp_name=d.corp_name and c.charge_name = ' ' '+@fee+ ' ' ' '
print @sql
exec(@sql)

------解决方案--------------------
字符串中的 ' '代表 '
select * from tb where a= '123 '

declare @s varchar(10)
set @s = '123 '
exec( 'select * from tb where a= ' ' '+@s+ ' ' ' ')相同
------解决方案--------------------
set @sql = 'update temp3 set fee '+rtrim(@i)+ '= c.month_price , '+ 'sumfee '+rtrim(@i)+ '= c.sum_price '+ ' from #temp1 c,temp3 d where c.corp_name=d.corp_name and c.charge_name = ' ' '+@fee+ ' ' ' '
print @sql
exec(@sql)

---------------------------------------------------
因为是字符需要‘’符号引用!~~~~而 ' '代表的是 '。。。