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

创建临时表为什么不存在?
我现在是用游标动态生成临时表,遇到一个问题.
举例说明:


declare   @strsql   varchar(4000)
set   @strsql= 'create   table   #Lanvasi(     a   varchar(100)   ) '

exec   (@strsql)

select   *   from   #Lanvasi

-------------------
--出现错误提示
服务器:   消息   208,级别   16,状态   1,行   6
对象名   '#Lanvasi '   无效。

这是怎么回事呢?
是不是临时表只存在exec运行的那个连接.运行完连接关闭,临时表就自动删除了吗
怎么样才能得到临时表

------解决方案--------------------
declare @strsql varchar(4000)
set @strsql= 'create table #Lanvasi( a varchar(100) ) '
exec (@strsql+ ' select * from #Lanvasi ')


------解决方案--------------------
declare @strsql varchar(4000)
set @strsql= 'create table #Lanvasi( a varchar(100) ) '

exec (@strsql + 'select * from #Lanvasi ')
------解决方案--------------------
生成临时表写在的动态sql语句中,但是select不是,不在一个作拥域内,所以提示临时表不存在

要么都写在动态sql中,就象楼上的写的,要么都不写
------解决方案--------------------
create table #Lanvasi( a varchar(100) )

declare @strsql varchar(4000)
set @strsql= 'insert into #Lanvasi ... '

exec (@strsql)

select * from #Lanvasi
------解决方案--------------------
declare @strsql varchar(4000)
set @strsql= 'create table #Lanvasi( a varchar(100) ) '
exec (@strsql+ ' select * from #Lanvasi ')

------解决方案--------------------
declare @strsql varchar(4000)
set @strsql= 'create table #Lanvasi( a varchar(100) ) '
exec (@strsql)
到此 ,#Lanvasi的生命周期已经结束
所以在下面引用的时候会提示 对象名 '#Lanvasi ' 无效。
select * from #Lanvasi

上面的几位已给出正确答案
------解决方案--------------------
临时表是只存在一个会话中

------解决方案--------------------
!!!!!
好像以上几位说的不对吧?
!!!!!
——可能原因是:你执行建表的一段语句所在的数据库是什么?
比如:
use master
go
declare @strsql varchar(4000)
set @strsql= 'create table #Lanvasi( a varchar(100) ) '
exec (@strsql)
go
这样临时表就是建在master库里的,要进行查询,则
use master
go
select * from #Lanvasi
go
或者是select * from master..#Lanvasi