请问大家一下。先来一个简单的例子
表A
Declare @sql varchar(8000)  
set @sql = 'select * from A'
exec (@sql)
执行之后如何使用这个查询结果集,也就是说如何把这个结果集放在一个临时表#temp里?

解决方案 »

  1.   

    Declare @sql varchar(8000) 
    select top 0 * into #t from A
    set @sql = 'select * from A'
    insert into #t exec (@sql)
      

  2.   

    create table #temp(.....)
    Declare @sql varchar(8000)  
    set @sql = 'insert #temp select * from A' 
    exec (@sql) 这是一种方法
      

  3.   

    select top 0 * into #t from A 
    Declare @sql varchar(8000)  
    set @sql = 'insert #temp select * from A' 
    exec (@sql) 结合JJ的,优化一下.
      

  4.   

    select top 0 * into #temp from A --不好意思,这里刚才忘改了.
    Declare @sql varchar(8000)  
    set @sql = 'insert #temp select * from A' 
    exec (@sql) 
      

  5.   


    declare @sql varchar(8000) 
    select top 0 * into #t from A 
    set @sql = 'select * from A' 
    insert into #t 
    exec (@sql)
      

  6.   

    select * from openrowset('SQLOLEDB','Server=.;Trusted_Connection=yes;',
    'exec(''select * from sysobjects'')')
      

  7.   

    如果在过程里面直接
    Declare @sql varchar(8000)  
    set @sql = 'select * into #temp from A' 
    exec (@sql) 
    在过程外将查不到#temp这个表的内容
      

  8.   

    insert #temp exec(@sql)
    要在SQL2005下才能执行.
      

  9.   

       1.  
      Exec   sp_serveroption   'servername','Data   Access','True'  
      go  
      Select   *     INTO   #tmpWho  
      From   OpenQuery(servername,'Exec   存储过程')  
       
      2.  
      先建一个表#TempTable  
      INSERT   INTO   [#TempTable]   Exec   存储过程 
      

  10.   

    select top 0 * into #t from A 
    select * into #t from A where 1=2这样都可以复制表A的结构.
      

  11.   

    复制表(只复制结构,源表名:a 新表名:b) (Access可用) 
    法一:select * into b from a where 1 <>1 
    法二:select top 0 * into b from a 
      

  12.   

    select top 0 * into #1 from A 
    Declare @sql nvarchar(4000)  
    set @sql = 'insert #1 select * from A' 
    exec (@sql) 
      

  13.   

    楼主只要注意一点。。
    在动态的语句中别创建一个临时表 
    比如
    ' select * into  #1 from A' 
    这样确实插入进去了
    可是你在外面select * from #1 提示 #1 不存在 
      

  14.   


    --第 一种
    select top 0 * into #temp from A 
    Declare @sql varchar(8000)  
    set @sql = 'insert #temp select * from A' 
    exec (@sql) --第二种
    Declare @sql varchar(8000)  
    set @sql = 'select * into #temp from A' 
    exec (@sql) 
      

  15.   

    很抱歉,我忘记说一点了。@sql是可变的,所以无法知道它的建立的表结构。所以以上方法都不可行,但还是谢谢大家的热心解答。现在我也想到解决方法了,把返回集放在全局表里或临时建立的实体表里。
      

  16.   

    如果表A是动态创建出来的,那如何才能将其读入到另一个表中呢?
    例如
    declare @strSql varchar(8000)
    set @strSql = ...
    exec(@strSql)才能获取到表,而表中的列时通过转置得到的,根据另一个表中数据可能改变其列数
    怎么在存储过程中获取exec(@strSql)执行出来的表呢?