一存储过程中从临时表的第二列(不知列名)读出数据,语句有写,明明有数据,读出却显示为空,为何?该如何解决

一存储过程中从临时表的第二列(不知列名)读出数据,语句有写,明明有数据,读出却显示为空,为何?
一存储过程中从临时表的第二列(不知列名)读出数据,语句有写,明明有数据,读出却显示为空,为何?
表的第二列明明有数据却读出来是空的。也不报错。是不是语句上有什么需要改动的?

declare @sql varchar(500)  
Create table #B(ttnumb numeric(18,2) null)  
   
  select @sql= 'select '+col_name(object_id( 'tempdb.dbo.#LOther '),2)+ ' from #LOther '  
  insert into #B exec(@sql)  
select * from #B 


 

------解决方案--------------------
一般在动态语句中不使用临时表,因为临时表不能时时保证任何用户任何时候访问的时候是同一个表.

也就是说,不同的用户(相同的用户)不用的时候访问的临时表是不唯一的.

可把上面的表改为固定的表,或临时使用的表(用完后删除).
------解决方案--------------------
这样写不是很严格:
1.假如#LOther有2列(a和b),当删除b列之后,再又添加一列b,这时表的结构还是a和b两字段,但col_name(...,2)的值就是null了,col_name(...,3)才能取到b;
2.col_name只能取当前数据库中表的列名,即对于你的例子,由于是临时表在tempdb中,所以只有这样use tempdb select col_name(...)才能取到列名
3.还是用系统表tempdb..syscolumns来取好些
------解决方案--------------------
declare @sql varchar(500)
select @sql= ' select '+col_name(object_id( '[Table1]'),2)+ ' from [Table1] '
exec(@sql)
------解决方案--------------------
临时表的生命周期问题,LZ可以换成全局临时表来做,把#LOther换成##LOther
------解决方案--------------------
多加一干空格.
select @sql= 'select '+col_name(object_id( 'LOther '),2)+ 'from LOther '
==>
SQL code
select @sql=   'select  '+col_name(object_id( 'LOther '),2)+  ' from LOther   '