我现在是用游标动态生成临时表,遇到一个问题.
举例说明:
declare @strsql varchar(4000)
set @strsql='create table #Lanvasi(  a varchar(100) )'exec (@strsql)select * from #Lanvasi-------------------
--出现错误提示
服务器: 消息 208,级别 16,状态 1,行 6
对象名 '#Lanvasi' 无效。这是怎么回事呢?
是不是临时表只存在exec运行的那个连接.运行完连接关闭,临时表就自动删除了吗
怎么样才能得到临时表

解决方案 »

  1.   

    有一个解决办法只用##Lanvasi,可是还有其它的办法吗
      

  2.   

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

  3.   

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

  4.   

    那就是说在exec这个语句里面才能用.出了这个语句临时表就不存在了吗?
    我现在程序的目的是在程序中创建一个connection,然后根据一个表生成临时表.
    再返回connection.这样就可以在程序中使用这个临时表,
      

  5.   

    生成临时表写在的动态sql语句中,但是select不是,不在一个作拥域内,所以提示临时表不存在要么都写在动态sql中,就象楼上的写的,要么都不写
      

  6.   

    create table #Lanvasi(  a varchar(100) )declare @strsql varchar(4000)
    set @strsql='insert into #Lanvasi ...'exec (@strsql)select * from #Lanvasi
      

  7.   

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

  8.   

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

  9.   

    !!!!!
    好像以上几位说的不对吧?
    !!!!!
    ——可能原因是:你执行建表的一段语句所在的数据库是什么?
    比如:
    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
      

  10.   

    wangtiecheng(不知不为过,不学就是错!) ( ) 信誉:100    Blog  2007-2-5 13:14:52  得分: 0  
     
     
       
    create table #Lanvasi(  a varchar(100) )declare @strsql varchar(4000)
    set @strsql='insert into #Lanvasi ...'exec (@strsql)select * from #Lanvasi
    -----------------------------------------
    create table #Lanvasi(  a varchar(100) )
    这个是动态生成的,是从一个表中取得数据然后生成表名,字段
      
     
      

  11.   

    现在的想法是只好动态生成全局的
    declare @strsql varchar(4000)
    declare @tablename varchar(200)
    set @strsql='create table ##'+tablename +'(  a varchar(100) )'
    exec (@strsql)
    GO